2010-03-18 53 views
2

我需要完成与.NET Console.ReadLine函数提供的相同的行为。程序执行应该在用户按回车键时继续。C - 相当于.NET Console.ReadLine

以下代码是不充分的,因为它需要额外的输入:

printf ("Press Enter to continue"); 
scanf ("%s",str); 

任何建议?

+0

我想你已经通过询问ReadLine功能而困惑了这个问题,但只需要实际读取一个字符;因此各种答案。我曾使用Console.ReadKey() – Clifford 2010-03-19 14:16:16

回答

5

你可以用fgets(),像这样:

#include <stdio.h> 

fgets(buf, sizeof(buf), stdin); 
2

使用函数getchar()

+0

获取单个字符,而不是一行。 Perrhaos你的意思是获取()但这是一个危险的函数,应该使用fgets()来代替。 – Clifford 2010-03-18 20:48:35

+0

@Clifford,OP确实展示了一个用户按下单个键(例如[enter])的例子...... – 2010-03-19 02:05:52

+0

啊!我正在解决实现Console.ReadLine()功能的要求。我现在明白你的观点。 – Clifford 2010-03-19 14:11:04

2

试试这个:

printf ("Press Enter to continue"); 
scanf(“%[^\n]“,str); 
0

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 
+0

你说的get()而不是getchar()只能从标准输入中得到一个字符。请注意,getline()是标准库的GNU扩展。 C++有一个类似的istream :: getline()和:: getline()函数不会混淆。在ISO C中,使用fgets()。 – Clifford 2010-03-18 20:47:38

+0

@Clifford:'getchar'将对任何*字符进行响应,而不仅仅是输入。现在,这可能是OP的意图,它会*工作,但这不是他要求的。但是我的问题是,如果用户没有注意到它有点脆弱(即他们忘记提示即将到来并开始输入下一个命令,'getchar'立即吃掉第一个字符,这样终端不会暂停,并且他们的下一个输入是主要字符)。是的,'fgets'是c标准,但是现在'getline'是POSIX的一部分,而不仅仅是一个GNU的东西了。 – dmckee 2010-03-18 21:07:33

+0

啊!我正在解决实现Console.ReadLine()功能的要求。我现在明白你的观点。尽管getchar()不受缓冲区溢出的影响,并且stdin在行缓冲区中,但在按下ENTER之前不会返回。 – Clifford 2010-03-19 14:10:38

0

你可以使用scanf函数做什么。

do{ 
    scanf("%s",str1); 
}while(str1[0] == '\0' || str1[0] == '\r' || str1[0] == '\n'); 
+1

请勿在帖子中加入签名。特别是不包含链接的链接。您可以在个人资料中执行此操作。 – Glorfindel 2017-01-09 10:43:16