程序不会等待第二次读取

时间:2013-03-31 12:18:11

标签: c fgets getchar

这是一个更大的程序的一部分,但令我疯狂的是程序不等待从字符串s中的stdin读取的东西(它只是在字符串s中放置null),但是如果我首先读取字符串s,然后我读取字符c程序工作正常。问题是我需要按照这个特定的顺序读取数据。 我该如何解决?

char s[100],c;
printf("enter character:\n");
c=getchar();
printf("enter string text:\n");
fgets(s,101,stdin);   
uint8_t s_len = strlen(s) - 1;        
s[s_len] = '\0'; 
printf("i have read %s\n",s);

2 个答案:

答案 0 :(得分:2)

按第一个字符的回车键时,实际的换行符仍保留在输入缓冲区中。然后,fgets调用会读取此换行符。

如果采用不同的方法,你可以解决这个问题。第一个是添加虚拟getchar调用,以获取换行符。这样做的缺点是,如果你在Windows上,换行实际上是两个字符。

另一个解决方案是将fgets用于第一个字符,然后使用例如sscanf提取角色。

答案 1 :(得分:1)

使用

c = getchar();
int eatMe;
do 
{
   eatMe = getchar();
} while (eatMe != '\n' && eatMe != EOF);