字串輸入的一些陷阱

2021-08-08 09:19:14 字數 1493 閱讀 8275

字串的輸入是很基礎的問題,不過其中的陷阱也不少。最關鍵的規避陷阱的方法就是心裡清楚輸入緩衝(stdio)裡還有什麼?

以下是十分常見的**之一,其中scanf("%c", &ch);也經常用getchar(&ch);來寫,

它們是一樣的。它們有乙個優秀之處是,所有的符號,甚至eof都能獲取並返回。

while(ch != '\n')

如果需要跳過所有的空格符號,就在%c之前加上『 』(空格)就好了。
while(ch != '#')

其中需要值得注意的有一點,此時再也無法使用'\n'作為結束接收的界定符號,

因為'\n'會被scanf函式跳過,因而無法返回乙個ch = '\n'。

在下面的**裡,我將'#'作為接收的結束界定符號,但是,這樣還是會有乙個問題!

因為檔案是按照行訪問的,所以scanf函式被設計成遇到回車'\n'才執行完。

因而你在輸入乙個串之後不免要按回車,例如你輸入「i am a dog.#」之後不免要按下回車結束。

正因為如此,當上述**執行到ch = '#'為真而跳出迴圈的時候,在輸入緩衝裡還留著乙個'\n'。

下面貼出乙個綜合性質的例子。

#include

#include

int main()

fflush(stdin) ;

printf("\n-----輸入以回車結尾-------\n") ;

while(ch != '\n') //如果注釋了fflush,從上面會留下乙個回車至此才被處理

printf("-----輸入帶空格串-------\n") ;

char str[100] ;

gets(str);//允許輸入帶空格串

puts(str);

printf("-----輸入帶空格串(淫技)-------\n") ;

scanf("%[^\n]",str);//允許輸入帶空格串

puts(str);

if(getchar() == '\n') puts("that is a '\\n' stay here.");

printf("-----輸入串不允許帶空格-------\n") ;

while(1)

return

0;}

下面介紹幾個輸入一行字串到buffer的方法,其中的優劣都寫在注釋裡了。

#include

//3個行輸入方案

int readline(char

str, int n)//周立功新書《程式設計與資料結構》的例子

str[i] = '\0';

return0;}

int main(int argc, char *argv)

return

0 ;}

一些字串函式

1.right location,somenumber left location,somenumber select right location,2 from my contacts 返回location列中所有右數兩個字元 select left location,2 from my cont...

字串的一些知識

1.string轉換成整數 string a 123 integer.parseint a throws numberformatexception integer.valueof a 呼叫parseint 丟擲異常同上 integer.valueof 8 56 而不是預想的8 可以用 8 0 2....

關於字串的一些。。。

首先呼叫這些函式需要使用標頭檔案include 1 des src abcd xyz abcdxyz char mystrcat char des,const char src 字串連線 2 字串比較 0,0,0 int mystrcmp const char str1,const char str...