我正在为我们正在学习的计算机科学课程(应该在其中学习C ++)编写的程序编写代码。在此程序中,我试图让用户输入喜欢的爆米花口味,但不能超过10(或9)个字符。当我尝试包括风味大于10个字符的程序时,该程序不会导致错误或无法正常工作,而只会将超过10个字符的字符存储到数组中的下一个元素中。如何停止程序执行此操作?
#define POP_COUNT 5
#define POP_SIZE 10
int main() {
char popcorn[POP_COUNT][POP_SIZE];
fputs("Enter your 5 favourite popcorn flavours: \n", stdout);
for (int i = 0; i < POP_COUNT; i++) {
fgets(popcorn[i], POP_SIZE, stdin);
popcorn[i][POP_SIZE - 1] = 0;
}
cout << popcorn[0] << endl;
cout << popcorn[1] << endl;
fputs("Your favourite flavours are: \n", stdout);
for (int i = 0; i < POP_COUNT; i++) {
fputs(popcorn[i], stdout);
}
}
答案 0 :(得分:0)
您的问题是由fgets()
的正常行为引起的。它读取的字符数不会超过您指定大小的缓冲区可以容纳的字符,包括终止符的空间。在给定呼叫中未读取的内容将一直在流中等待,并且将在下一个呼叫中读取。
要解决此问题,您必须先检测。您可以通过检查换行符是否存储在目标缓冲区中来实现。如果是这样,那么您就很好,但是如果不是,则仅读取了部分行。还要注意,您无需手动插入终止符-fgets()
在成功时将始终包含终止符。
如果您只想丢弃任何多余的字符,那么在第二种情况下,您必须完全这样做-读取并忽略其他字符,直到您已读取换行符或到达文件末尾为止。