[英]how does fgets internally works?
嗯,这是一个基本问题,但我似乎很困惑。
#include<stdio.h>
int main()
{
char a[100];
printf("Enter a string\n");
scanf("%s",a);
}
基本上上面就是我想要实现的目标。 如果我输入一个字符串
James Bond
然后我想将它存储在数组a中。 但问题是因为只存在James字之间存在空格。 那么我该如何解决这个问题呢?
UPDATE
在下面给出的回复后,我理解fgets()将是更好的选择。 我想知道fgets的内部工作,为什么它能够存储带有空格的字符串,而scanf不能这样做。
这是你需要的吗?
所有实现都扫描输入文件(或流),直到达到\\ n或EOF,或者命中maxSize
参数...
scanf读取直到第一个空格字符。 解决方案是使用fgets,如果内存正确地为我服务,在你的实例中它将是:
fgets(a, 100, STDIN);
它将从标准输入读取最多100个字符(或第一个\\ n)并将其存储在a中。
即使它看起来更容易,也不要使用gets函数。
通常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
函数读取尽可能多的字符,直到嵌套换行符。
你应该使用gets(a)/ fgets(a,sizeof(a),stdin)而不是sscanf()。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.