0

例如,请找到以下代码

main()
{
    int i;
    char s[100];
    printf("Enter the string \n");
    scanf(" %s ",s);
    printf("Enter the string\n");
    scanf("%d",&i);
    printf("%s\n%d\n",s,i);
}

上面代码的输出是

Enter the string 
hai
hai
Enter the string
hai
0

它应该接受一行输入,但它也接受第二行。
如果删除了 scanf 中的空间,则输出正确。

谁能解释一下?

当使用与整数(%d)相同时,它不会发生。它发生在字符串上。

4

5 回答 5

1

Your first scanf asks for a string and will skip leading whitespaces.
Your second scanf asks for an integer.

When you enter "hai" it goes in s[]. It would have been the same with " hai", keeping only "hai".
When you enter "jai" it is parsed as an int and thus gives you zero.

There is nothing wrong with your program except the second printf should be

printf("Enter an integer\n");
于 2012-10-03T09:19:04.053 回答
1

scanf()的手册页:

一系列空白字符(空格、制表符、换行符等;参见 isspace(3))。该指令匹配输入中任意数量的空白,包括无空白。

当格式字符串中有空格时,它会跳过输入中的任意数量的空格字符。这意味着您必须输入非空白字符,以便继续读取您的字符串s

在 C/POSIX 语言环境中,空白字符可以是:

空格、换页符 ('\f')、换行符 ('\n')、回车符 ('\r')、水平制表符 ('\t') 和垂直制表符 ('\v')。

于 2012-10-03T09:29:15.250 回答
1

我们的第一个 scanf 在开头等待一个包含空格的字符串,但它没有。所以它要求您再次输入字符串,并在第二次被接受,因为您在输入新字符串之前键入 [enter]。[enter] 在 scanf 中被视为空白。

参考这个链接好像是一样的

解释 scanf 中没有空格和 scanf 中有空格有什么区别?

于 2012-10-03T09:14:47.047 回答
0

“%s”中不应该有空格 句子来了两次的原因是你写了两次

于 2012-10-03T09:35:12.963 回答
-1

尝试

main()
{
    int i;
    char s[100];
    printf("Enter the string \n");
    scanf("%c", &s);
    fgets(s, 100, stdin);
    printf("Enter the string\n");
    scanf("%d",&i);
    printf("%s\n%d\n",s,i);
}

fgetsc得到一些字符。

于 2012-10-03T09:43:28.713 回答