[英]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.