2013-07-21 118 views
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(); 
} 

谢谢! :)

+0

1)它不会编译,如果你尝试和2)你为什么不尝试? – JRG

+0

你可能需要一个很好的C教程 – P0W

+0

@AdrianJandl在连续%s之间没有空格 – lebowski

回答

1

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

从人,%s转换规范,

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

0

scanf(3) man page

转换开始之前,大部分转换跳过空白

和:

s匹配的非涂白序列空格字符

-1

您的书籍权利。

当您从用户处获得一个带有scanf的字符串时,当第一个spase,tab或enter在输入中时,它停止读取。其余的输入保留在缓冲区中。

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

我认为你还没学过FILES,所以现在应该足够了。