2017-02-22 90 views
2

因此,这里是我的代码:如何检查用户是否输入字符串值?

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! "); 
     } 
} 

我的问题是,我可以扫描用户进入并储存起来,如果东西存在,它拿出正确的消息。但如果我只是打回来测试没有输入(空,空等),程序既不退出也不输出我的错误信息。它只是挂起,直到我输入一些东西。

我一直在Java编程的最后两个学期,所以C现在完全失去了我。所以任何帮助将不胜感激。

+0

所以你只是想验证输入是否是一个字符串? –

+4

不要使用'scanf'(永远)。使用'fgets',或者,如果你有,'getline'。然后,“刚刚返回”会产生字符串'“\ n”'并输入control-D(强制EOF条件)会产生字符串'“”''。顺便说一句,第二个和第三个'printf'字符串末尾的空格应该是'\ n'。 – zwol

+0

@OusmaneDiaw在这一点上,是的。我的代码必须做其他事情,但我必须能够验证事实上有某种输入。 – Polly

回答

1

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); 
} 

输入

Hello World (and <Enter>) 

输出(注意\ n读取在仍然保留)

Input line: <Hello World 
> 

要清楚:在C中,字符串是一个字符序列,直到并包括终止空字符'\0'。用户不输入字符串。用户输入通常是的文本直至并包括终止换行'\n'fgets()读取的输入,然后将空字符附加到结果buffer字符串`。

+0

哦,我的天哪,非常感谢!它现在就像梦一样运作!哈哈。 – Polly

0

这是我的建议:不要使用scanf。它的规则很混乱,很难得到你想要的行为。 相反,我建议您使用getch手动将每个字符读入缓冲区,直到用户输入换行符'\n'。然后,您可以使用0零终止缓冲区,然后将该缓冲区用作普通字符串。如果它是空的,只需使用strlen(x)检查字符串的长度。

+0

你知道'fgets'吗? –

+0

是的,但我更喜欢不使用自己实现的标准库函数。 – bace1000

相关问题