所以这是我的代码:
main()
{
char *iochar;
printf(" Enter a standard line: ");
scanf ( "%s", &iochar);
if (iochar != NULL)
{
printf(" Here's what you entered: %s ", &iochar);
}
else
{
printf(" Oops! Looks like you forgot to enter something! ");
}
}
我的问题是我可以扫描用户条目并存储它,如果存在,它会输出正确的消息。但是,如果我只是点击返回测试没有输入(null,空等),程序既不退出也不输出我的错误消息。它只是挂起,直到我输入内容。
我在过去的两个学期里一直用Java编程,所以C现在完全迷失了。所以任何帮助都会非常感激。
答案 0 :(得分:1)
mehtodname_id
对于检测空行没有用。
scanf ( "%s", &iochar);
首先指示"%s"
读取并丢弃所有前导空格,包括scanf()
,然后再继续读取非空白字符。所以代码丢失了'\n'
。
而是使用'\n'
fgets()
输入
// Enough room for 80 characters + \n + \0
#define LINE_SIZE (80 + 1 + 1)
char buf[LINE_SIZE];
if (fgets(buf, sizeof buf, stdin) == NULL) {
puts("end-of-file or input error detected");
} else if (buf[0] == '\n') {
puts("Empty line entered");
} else {
printf("Input line: <%s>\n", buf);
}
输出(注意\ n读入仍然保留)
Hello World (and <Enter>)
要明确:在C中,字符串是一系列字符,包括终止空字符 Input line: <Hello World
>
。用户不输入字符串。用户输入通常是文本的行,包括终止换行 '\0'
。 '\n'
读取输入的行,然后将空字符附加到结果fgets()
是字符串`。
答案 1 :(得分:0)
以下是我的建议:不要使用scanf
。它的规则令人困惑,并且很难获得你想要的行为。
相反,我建议您使用getch
手动将每个字符读入缓冲区,直到用户输入换行符'\n'
。然后,您可以使用0
将终止缓冲区归零,然后将缓冲区用作普通字符串。要使其为空,只需使用strlen(x)
检查字符串的长度。