如何检查用户是否输入字符串值?

时间:2017-02-22 18:34:48

标签: c

所以这是我的代码:

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现在完全迷失了。所以任何帮助都会非常感激。

2 个答案:

答案 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)检查字符串的长度。