我是一名软件工程专业的学生,我正在圣诞节放假,以便在下学期变得更好,我一直在编写各种控制台应用程序来练习。但是我遇到了一个问题,我需要从用户那里获取整数输入。我一直在使用fgets
从中获取字符串stdin
,然后使用sscanf
来获取整数(效果很好)但是如果用户输入的内容超过我的缓冲区大小,则流中会留下尾随字符(包括换行符跳过我的下一次调用fgets
)。我环顾四周,发现大多数人似乎认为while(getchar() != '\n');
这会给我带来问题,因为如果没有要消耗的换行符,则会发生不必要的输入扫描。
例子:
int ch;
char* buffer = (char*)malloc(BUFSIZ*sizeof(char));
while((ch = getchar()) != '\n' && ch != EOF);
fgets(buffer,BUFSIZ*sizeof(char),stdin);
如果缓冲区不是太小并且流中没有尾随字符,则存在不必要的getchar()
输入。
输出:
A
A
You typed A
Intended Output:
A
You typed A
我希望我说得足够清楚,我很感激任何帮助。