2016-10-30 103 views
2
​​

爲什麼我們必須插入3個輸入,因爲在雙引號之前和之後給出空格?scanf函數如何在C中工作?

+0

@chqrlie,他爲什麼要接受一個答案?可能他們都不滿意。不要問它,那不禮貌。 –

+0

@LuisColorado:OP在這方面的經驗很少,我只是在告訴如何接受答案。他的問題在兩個答案中都得到完全解決,接受其中一個是預期的行爲。我將重新修改評論以使其更加中立。 – chqrlie

回答

1

scanf()格式" %d%d "有不良副作用多餘的空格:

  • 第一個是多餘的,它指示scanf()跳過任何前導空格,但這樣已經不爲部分的%d轉換。去掉它。

  • 尾隨的問題導致您的問題:它告訴scanf()跳過第二個整數後的任何尾隨空格。因此它會繼續讀取輸入,直到它看到不是空白或流結束的東西。也刪除它。

請注意,您還應驗證scanf()並使用它們的值轉換前2個整數。也總是打印一個尾隨的換行符,因爲如果不這樣做,某些系統不會正確地刷新輸出。

#include <stdio.h> 

int main(void) { 
    int a, b; 
    printf("Enter the values of a and b: "); 
    if (scanf("%d%d", &a, &b) == 2) { 
     printf("a=%d b=%d\n", a, b); 
    } 
    return 0; 
} 
0

爲什麼我們必須插入3個輸入作爲空格在雙引號之前和之後給出?

當您在格式字符串有空白,它會跳過任何數量的輸入流中的空格中。因此,scanf()需要一個非空白*輸入才能終止。

scanf從手冊:

的空白字符的序列(空格,製表,換行等;見 isspace爲(3))。該指令與輸入中的任意數量的空白空間 (包括無)匹配。

所以,從格式字符串中刪除空格。或者更好,avoid scanf() altogether.