簡體   English   中英

Scanf字符串空間問題C

[英]Scanf String Space Issue C

我知道已經問過許多類似的問題,但是,由於我的問題可能不太清楚,我願意澄清是否需要。 就像這樣,說我想在C中獲得一個用空格分隔的名稱字符串。或者總的來說,我想學習scanf為什么它的行為如此奇特,以防CI中的文件I / O想要調試這樣的東西。東西。 我應該能夠打印完整的字符串,只要它不超過C中的字符數組限制即可。我在該主題上進行了大量搜索,但如果可以通過某種方式打印出C中stdin的內部表示, 。 例如 :-

#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;
}

例如,假設我輸入,(space)Apple(按Enter),我可以以某種方式打印出內部表示形式,我認為它有點類似於(ASCII表示空格)('A''p''p''l''e' '\\ 0')'\\ n'我認為它不將'\\ n'存儲在緩沖區中嗎? 現在,如果我給出一個用空格分隔的字符串,我知道scanf會丟棄它,那么了解它會變得有些復雜。

但是我不明白流如何保持緩沖,為什么理解它如此重要? 沒冒犯,我對C中的stdin文件操作和scanf真的很困惑。也許有一些很好的例子來說明這一點。 我不是一個書呆子,所以我發現手冊對初學者不太友好。 我對C的File Input \\ Output絕對感興趣:) :) :)

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';
}

暫無
暫無

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

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