这是一个基本问题,但我似乎很困惑。
#include<stdio.h>
int main()
{
char a[100];
printf("Enter a string\n");
scanf("%s",a);
}
基本上上面就是我想要实现的目标。 如果我输入一个字符串
James Bond
然后我想将它存储在数组a中。 但问题是因为只存在James字之间存在空格。 那么我该如何解决这个问题。
更新
在下面给出的回复后,我理解fgets()将是更好的选择。我想知道fgets的内部工作,为什么它能够存储带有空格的字符串,而scanf也不能这样做。
答案 0 :(得分:5)
这是你需要的吗?
所有实现都会扫描输入文件(或流),直到达到\ n或EOF,或maxSize
param被命中...
答案 1 :(得分:1)
scanf读取直到第一个空格字符。解决方案是使用fgets,如果内存正确地为我服务,在你的实例中它将是:
fgets(a, 100, STDIN);
它将从标准输入读取最多100个字符(或第一个\ n)并将其存储在a。
不要使用gets函数,即使它看起来更容易。
答案 2 :(得分:1)
通常scanf
会破坏空白处的输入(空格,制表符,换行符......)。
例如,输入" 5 42 -100"
被scanf("%d%d%d")
接受,因为每个%d
都会删除前导空格。 %s
也会发生同样的行为。
忽略前导空格的唯一转换说明符是%%
,%[
和%c
(并且,出于不同的原因,%n
)
char input[] = " hello world";
char buf[100];
sscanf(input, "%8c", buf); /* buf contains " hello w" */
sscanf(input, "%8[^o]", buf); /* buf contains " hell" */
fgets
函数读取尽可能多的字符,直到嵌套换行符。
答案 3 :(得分:0)
你应该使用gets(a)/ fgets(an,sizeof(an),stdin)而不是scanf()。
答案 4 :(得分:0)
尝试fgets():
char a[100];
printf("Enter a string\n");
fgets(a, sizeof(a), STDIN);
要详细了解STDIN
,check this。