【发布时间】:2017-12-08 16:52:26
【问题描述】:
我正在尝试从stdin 中读取一行,但我不知道如何正确处理输入大小至少等于限制的情况。示例代码:
void myfun() {
char buf[5];
char somethingElse;
printf("\nInsert string (max 4 characters): ");
fgets (buf, 5, stdin);
...
printf("\nInsert char: ");
somethingElse = getchar();
}
现在,用户可以做三件事:
-
输入少于 4 个字符(加上换行符):在这种情况下,stdin 中没有任何内容,随后的
getchar()正确等待用户输入; -
正好输入 4 个字符(加上换行符):在这种情况下,stdin 中会留下一个换行符,随后的
getchar()会读取它; -
输入超过 4 个字符(加上换行符):在这种情况下,stdin 中至少还有一个字符,随后的
getchar()读取它,至少留下一个换行符。
案例 2 和 3 需要使用类似 while(getchar() != '\n') 的方式清空 stdin,而案例 1 不需要任何额外的行动。据我通过阅读类似问题的答案和 c-faq 了解到,没有标准/便携的方法可以知道实际场景是否是 1 中描述的场景。
我做得好吗?或者实际上有 一种可移植的方式来做到这一点?或者可能是完全不同的方法?
【问题讨论】:
-
检查
buf[]是否包含换行符? -
最多 3 个字符,而不是 4 个,因为
\n也会进入缓冲区。 -
你是对的@MichaelWalz,应该警告用户。