这是一个更大的程序的一部分,但令我疯狂的是程序不等待从字符串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);
答案 0 :(得分:2)
按第一个字符的回车键时,实际的换行符仍保留在输入缓冲区中。然后,fgets
调用会读取此换行符。
如果采用不同的方法,你可以解决这个问题。第一个是添加虚拟getchar
调用,以获取换行符。这样做的缺点是,如果你在Windows上,换行实际上是两个字符。
另一个解决方案是将fgets
用于第一个字符,然后使用例如sscanf
提取角色。
答案 1 :(得分:1)
使用
c = getchar();
int eatMe;
do
{
eatMe = getchar();
} while (eatMe != '\n' && eatMe != EOF);