2015-11-04 123 views
0

嗯,我知道很多類似的問題,但是,我願意澄清是否需要,因爲我的問題可能不是很清楚。 所以它是這樣的,說我想在C中獲得一個空格分隔的名稱字符串。 或者一般來說,我想了解scanf爲什麼它在CI中的文件I/O想要善於處理字符串時表現得如此奇怪調試這樣的東西。 我應該能夠打印完整的字符串,只要它不超過我在C中的字符數組限制。 我在這個主題上搜索了很多,但是如果可以打印出C中stdin的內部表示,某種方式。 例如: -Scanf字符串空間問題C

#include<stdio.h> 
#include<stdlib.h> 
int main() { 
    char name[100]; // accept 100 chars 

    printf("\nEnter your name: "); // This writes to stream stdout 
    scanf("%100s",name); // Specify char limit in scanf 
    while(getchar()!='\n'); // Until user presses 'Enter' else scan 100 chars 
    return 0; 
} 

例如,假設I型,(空間)蘋果公司(按Enter鍵) 我能以某種方式打印出內部表示,這是我覺得有點 類似(ASCII空間)(」 ''''''''''''''n' 它不會在緩衝區中存儲'\ n'我認爲? 現在理解如果我給出一個空格分隔的字符串會發生什麼,我知道scanf會丟棄它。

但我不明白流是如何保持緩衝的,爲什麼理解它很重要?沒有冒犯,我真的很困惑stdin文件操作& scanf在C也許一個很好的例子來說明這一點。 我不是一個非常討厭的傢伙,所以我覺得手冊不是很初學者友好。 我在文件輸入\輸出用C很有興趣:) :) :)

回答

0
scanf("%100s",name); // Specify char limit in scanf 

指定可以讀入name字符的最大數量。順便說一句,應該是99,因爲你需要數組的一個元素作爲終止空字符。但是,這不會強制讀取100個字符。遇到空白時它仍會停止。要閱讀整行,請使用fgets並確保修剪結束換行符。

fgets(name, 100, stdin); // You use 100 here. fgets will read at 
         // most 99 characters. 
int len = strlen(name); 
if (name[len-1] == '\n') 
{ 
    name[len-1] = '\0'; 
}