0

这是一个更大程序的一部分,但让我抓狂的是程序不会等待从字符串 s 中的标准输入读取某些内容(它只是将 null 放入字符串 s),但如果我把首先读取字符串 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);
4

2 回答 2

2

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

您可以通过几种不同的方法来解决这个问题。首先是添加一个虚拟getchar调用,以获取换行符。这有一个缺点,如果你在 Windows 上,换行符实际上是两个字符。

另一种解决方案是也使用fgets第一个字符,然后使用 egsscanf提取字符。

于 2013-03-31T12:23:02.987 回答
1

采用

c = getchar();
int eatMe;
do 
{
   eatMe = getchar();
} while (eatMe != '\n' && eatMe != EOF);
于 2013-03-31T12:22:50.987 回答