簡體   English   中英

fgets內部如何運作?

[英]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函數讀取盡可能多的字符,直到嵌套換行符。


我使用The Open Group Base Specifications Issue 7進行在線文檔

你應該使用gets(a)/ fgets(a,sizeof(a),stdin)而不是sscanf()。

試試fgets()

char a[100];
printf("Enter a string\n");
fgets(a, sizeof(a), STDIN);

要了解有關STDIN更多信息, 請選中此項

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM