0

如果我在 scanf 语句中提供字符串“爱丽丝梦游仙境”,那么以下代码(底部的代码)的输出是什么?我的书说输出应该是:

Alice
in
wonder
land

好吧,如果我将“爱丽丝梦游仙境”作为单个字符串提供,为什么这是输出?当我将“爱丽丝梦游仙境”作为单个字符串提供时,如何在“Alice”、“in”、“wonder”、“land”等词之间提供空格使它们成为单独的字符串?

#include<stdio.h>
void main()
{
    char s1[10], s2[10], s3[10], s4[10];
    scanf("%s%s%s%s", s1, s2, s3, s4);
    printf("\n%s\n%s\n%s\n%s", s1, s2, s3, s4);
    getch();
}

谢谢!:)

4

3 回答 3

1

这就是scanf工作原理。%s格式说明符告诉scanf读取直到任何空白,其中包括任意数量的空格制表符输入键并将其存储在相应的地址中。

从人,%s转换规范,

匹配一系列非空白字符;下一个指针必须是一个指向字符数组的指针,它的长度足以容纳输入序列和自动添加的终止空字节 ('\0')。输入字符串在空白处或最大字段宽度处停止,以先发生者为准

于 2013-07-21T16:09:06.647 回答
0

scanf(3)手册页

在转换开始之前,大多数转换都会跳过空格

和:

s匹配一系列非空白字符

于 2013-07-21T16:08:56.467 回答
-1

您的图书权利。

当你从用户那里得到一个带有 scanf 的字符串时,它会在第一个 spase、tab 或 enter 出现在输入中时停止读取。其余的输入留在缓冲区中。

这就是为什么您不应该使用 scanf 来读取字符串的原因。您可以使用在第一次输入时停止的 gets() 函数,这意味着您可以在输入中包含空格或制表符。

我假设你还没有学习 FILES,所以现在应该足够了。

于 2013-07-21T16:09:49.847 回答