scanf()将新的行字符留在缓冲区中
我有以下程序:
int main(int argc, char *argv[]) { int a, b; char c1, c2; printf("Enter something: "); scanf("%d",&a); // line 1 printf("Enter other something: "); scanf("%d", &b); // line 2 printf("Enter a char: "); scanf("%c",&c1); // line 3 printf("Enter another char: "); scanf("%c", &c2); // line 4 printf("Done"); // line 5 system("PAUSE"); return 0; }
正如我在C书中读到的,作者说scanf()
在缓冲区中留下了一个新的行字符,因此,程序不会停在第4行,以便用户input数据,而是将新的行字符存储在c2并移动到第5行。
是对的吗?
但是,这是否只发生在char
数据types? 因为我没有看到这样的问题int
数据types在行1,2,3,是吗?
在尝试parsing除字符以外的东西之前, scanf()
函数会自动删除空格。 字符格式(主要是%c
;扫描集%[…]
和%n
)是例外; 他们不删除空格。
使用前导空白的" %c"
跳过可选的空格。 不要在scanf()
格式的string中使用尾随空格。
请注意,这仍然不会消耗inputstream中留下的任何尾随空格,甚至不会消耗到行的末尾,所以要注意,如果在同一个inputstream上也使用getchar()
或fgets()
。 我们只是让scanf 在转换之前跳过空格,就像%d
和其他非字符转换一样。
使用scanf(" %c", &c2);
。 这将解决您的问题。