scanf,cin以及其返回值

2021-08-30 06:21:49 字數 1605 閱讀 7066

本人認為資料處理是非常重要的,如果能在輸入時候進行處理會省下很多事情。

1:從scanf()角度看輸入

如果使用%d說明符,scanf()函式開始每次讀取乙個輸入字元,它跳過空白字元(空格,製表符和換行符)直到遇到乙個非空白字元,並持續讀取和儲存字元直到它遇到乙個非數字的字元。

如果使用%c說明符,那麼所有的輸入字元都是平等的。如果下乙個輸入字元是乙個空格或者換行符,將會把這個空格或換行符賦給指定的變數;不會跳過空白字元。

2:格式字串中的常規字元

scanf("%d, %d",&n,&m);

即輸入乙個數字,乙個逗號,乙個數字。如:

88,121

或者88,

121格式字串中的空格意味著跳過下乙個輸入項之前的任何空格。例如下面語句

scanf("%d,   %d",&n,&m);

將會接受下列任何乙個輸入行:

88,121

88 , 121

88,    121

注意,「任何空格」的概念包括沒有空格的特殊情況。

2:scanf 的返回值

scanf()函式返回成功讀入的專案的個數,scanf 的返回值可以分成三種情況:

(1)正整數 , 表示正確輸入引數的個數。例如執行 scanf ("%d %d", &a, &b);  如果使用者輸入"3 4",可以正確輸入並返回2(正確輸入了兩個變數);如果使用者輸入"3,4",可以正確輸入a,無法輸入b,返回1(正確輸入了乙個變數)。 

(2) 0,表示使用者的輸入不匹配,無法正確輸入任何值。如上例,使用者如果輸入",3 4",返回0。   

(3)eof,這是在stdio.h裡面定義的常量(通常值為-1),表示輸入流已經結束。在windows下,使用者按下ctrl+z(會看到乙個^z字元)再按下回車,就表示輸入結束;                

如   scanf("%d%d",&a,%b);

如果a和b都被成功讀入,那麼scanf的返回值就是2

如果只有a被成功讀入,返回值為1

如果a和b都未被成功讀入,返回值為0 如果遇到錯誤或遇到end of file,返回值為eof。

關於cin的返回值

其實這麼說有點錯誤的,

因為cin是個物件,沒有所謂返回值之說,一般來說其他物件過載了》操作符,才有了所謂的返回值,很多時候》輸入操作符返回流物件的引用,cin >> x 返回istream&,cout << x返回oostream&,暫且不說物件,就說c++的內嵌型別,如int,char之類的。

我們可以看到的現象是這樣的:

1.if可直接判斷流,如if (cin),while可以間接判斷(判斷為bool型),如while (cin >> x)

2.若流被標記錯誤(讀取失敗)就返回false,也就是0。

3.鍵入eof時,while(cin>>str){}會退出,其中str為string。

4.當在緩衝區讀取到的資料與》後面的變數型別不匹配的時候,就會結束。比如說a,b是int的,你如果在下面的cin>>裡面輸入的是非int的(比如說是'a'或其它)就會結束。

引數傳遞以及返回值

在呼叫乙個方法時,我們經常傳入我們需要的引數,對於基本型別的傳入,在執行方法時直接用即可,這裡僅介紹幾種引用型別的引數傳遞 類名作為形式引數 如果乙個方法的形參要乙個類 型別,就傳入乙個該類的物件 根據 可知,建立物件時完成初始化,此時物件裡的的num時2,在呼叫方法時,傳入30,替代了原來的2,所...

執行緒返回值以及執行緒鎖

執行緒返回值以及執行緒鎖 public string threads catch interruptedexception e catch executionexception e return null 實現乙個thread類 執行緒類,必須實現callable介面,返回型別可以隨意定義,根據需求...

方法引數型別以及返回值

乙個方法的形參要乙個類 型別,就傳乙個該類的物件 public class mytest public static void set student student,int num class student 輸出結果 2乙個方法的形參要乙個抽象類 型別,傳乙個該抽象類的子類物件 public c...