我需要完成与.NET Console.ReadLine函数提供的相同的行为。程序执行应该在用户按回车键时继续。C - 相当于.NET Console.ReadLine
以下代码是不充分的,因为它需要额外的输入:
printf ("Press Enter to continue");
scanf ("%s",str);
任何建议?
我需要完成与.NET Console.ReadLine函数提供的相同的行为。程序执行应该在用户按回车键时继续。C - 相当于.NET Console.ReadLine
以下代码是不充分的,因为它需要额外的输入:
printf ("Press Enter to continue");
scanf ("%s",str);
任何建议?
你可以用fgets(),像这样:
#include <stdio.h>
fgets(buf, sizeof(buf), stdin);
试试这个:
printf ("Press Enter to continue");
scanf(“%[^\n]“,str);
getline
在大多数情况下比getchar
可能会更好。它允许您在“回车”之前捕获所有用户的输入,并且不会受到缓冲区溢出的影响。
char *buf=NULL;
printf("Press enter to continue: ");
getline(&buf,0,stdin);
// Use the input if you want to
free(buf); // Throw away the input
你说的get()而不是getchar()只能从标准输入中得到一个字符。请注意,getline()是标准库的GNU扩展。 C++有一个类似的istream :: getline()和:: getline()函数不会混淆。在ISO C中,使用fgets()。 – Clifford 2010-03-18 20:47:38
@Clifford:'getchar'将对任何*字符进行响应,而不仅仅是输入。现在,这可能是OP的意图,它会*工作,但这不是他要求的。但是我的问题是,如果用户没有注意到它有点脆弱(即他们忘记提示即将到来并开始输入下一个命令,'getchar'立即吃掉第一个字符,这样终端不会暂停,并且他们的下一个输入是主要字符)。是的,'fgets'是c标准,但是现在'getline'是POSIX的一部分,而不仅仅是一个GNU的东西了。 – dmckee 2010-03-18 21:07:33
啊!我正在解决实现Console.ReadLine()功能的要求。我现在明白你的观点。尽管getchar()不受缓冲区溢出的影响,并且stdin在行缓冲区中,但在按下ENTER之前不会返回。 – Clifford 2010-03-19 14:10:38
你可以使用scanf函数做什么。
do{
scanf("%s",str1);
}while(str1[0] == '\0' || str1[0] == '\r' || str1[0] == '\n');
请勿在帖子中加入签名。特别是不包含链接的链接。您可以在个人资料中执行此操作。 – Glorfindel 2017-01-09 10:43:16
我想你已经通过询问ReadLine功能而困惑了这个问题,但只需要实际读取一个字符;因此各种答案。我曾使用Console.ReadKey() – Clifford 2010-03-19 14:16:16