www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 芯聞號 > 充電吧
[導讀]曾經錯的幾個地方:(xpsp2,vc6.0環(huán)境下)1.空白符問題#includemain(){int a;printf("input the data\n");scanf("%d\n",&a)

曾經錯的幾個地方:(xpsp2,vc6.0環(huán)境下)

1.空白符問題

#include

main()

{

int a;

printf("input the datan");

scanf("%dn",&a);//這里多了一個回車符n

printf("%d",a);

return 0;

}

結果要輸入兩個數程序才結束,而不是預期的一個。why?

原因:用空白符結尾時,scanf會跳過空白符去讀下一個字符,所以你必須再輸入一個數。這里的空白符包括空格,制表符,換行符,回車符等。所以如果你用scanf("%d ",&a)也會出現同樣的問題。

解決方法:這種錯誤大多是輸入的時候不小心,多注意一點就好了。這種問題也不好檢查,編譯沒有問題,一個空格也不容易看出來。當你的程序出現上面的問題時,自己對照檢查一下就可以了。

2.緩沖區(qū)問題(“垃圾”字符)

這是一個非常容易錯的地方,我就錯過多次。

#include

main()

{

int n = 5;

char c[n];

for(int i = 0; i < n; i++)

c[i] = scanf("%c",&c[i]);

printf(c);

return 0;

}

如果輸入:

a

b

c

那么循環(huán)就會“提前”結束了.

原因:輸入a和第一個回車后,a和這個回車符都留在緩沖區(qū)中。第一個scanf讀取了a,但是輸入緩沖區(qū)里面還留有一個n,第二個scanf讀取這個n。然后輸入b和第二個回車,同樣的,第三個scanf讀取了b,第四個scanf讀取了第二個回車符。第五個讀取了c。所以五個scanf都執(zhí)行了,并沒有提前結束。只不過有的scanf讀取到了回車符而已。

解決方法:把程序改成這樣就可以了:

for( i = 0; i < n; i++){

scanf("%c",&c[i]);

fflush(stdin);//刷新緩沖區(qū)

}

或者不用scanf,而用gets()函數,如:

#include

main()

{

char c[5];

gets(c);

printf(c);

return 0;

}

但要注意:這個函數自動把你最后敲的回車轉換為字符'