我目前正在进行练习。我的程序正在运行,我只想让它更加强大和万无一失。代码如下:
printf("Enter Name : ");
memset(userinput, '\0', 50);
fgets(userinput, 50, stdin);
我不小心点击了输入键(换行符),对于我的程序,系统只是悬挂在那里,无法接受任何输入。我只被允许使用fgets
。那么有没有办法拒绝将\n
作为字段输入?
答案 0 :(得分:3)
你可以做的一种方法是检查第一个字符是否是换行符:
do {
printf("Enter Name : ");
memset(userinput, '\0', 50);
fgets(userinput, 50, stdin);
}
while ( userinput[0] == '\n');
printf("Hello %s", userinput);
这仍然会让你达到空间+换行符,但它是第一次开始。
答案 1 :(得分:0)
那么有没有办法拒绝将\ n作为字段输入? ...使其更加强大和万无一失。
代码不应阻止 '\n'
通过fgets()
阅读。相反,代码应该评估该输入的有效性。领先'\n'
可能只有一个问题。使代码易于更新,因为有效名称的标准肯定会发生变化。
我建议单独进行名称测试。
bool ValidNameInputTest(const char *userinput) {
if (*userinput == '\n') return false; // fail
// add other tests as needed
return true;
}
在循环中,根据需要进行测试和重复。代码应该在成功时退出循环。当发生文件结束或输入错误时,代码也应该检测/处理它。
...
char userinput[50];
do {
printf("Enter Name : ");
fflush(stdout); // add to insure above output is seen before reading input
//memset(userinput, '\0', 50);// Commented out as not needed - although useful for debug
// Check return value and used a derived size
//fgets(userinput, 50, stdin);
if (fgets(userinput, sizeof userinput, stdin) == NULL) {
Handle_EndOfFile_or_Error();
}
} while (!ValidNameInputTest(userinput));