一個關於輸入輸出的問題
- #include
- #include
- int main()
- {
- int i = 0;
- int m = 0;
- //char str[100];
- while (scanf("%d",&m))
- {
- char str[10][10];
- for (i = 0;i < 5;i++)
- {
- printf("請輸入第%d 個字符:",i+1);
- //fgets(str[i],50,stdin);
- //gets(str[i]);
- scanf("%s",str[i]);
- //printf("%s",str[i]);
- // // scanf("%d",&m);
- }
- }
- /*while (gets(str))
- {
- printf("%s\n",str);
- }*/
- //return 0;
- return 0;
這個程序的奇葩輸出:
3
請輸入第1個字符:請輸入第2個字符:1
請輸入第3個字符:2
請輸入第4個字符:34
請輸入第5個字符:3
2
請輸入第1個字符:請輸入第2個字符:1
請輸入第3個字符:2
請輸入第4個字符:34
請輸入第5個字符:5
gets 函數在沒有while循環時好使,有while循環就不好使了,由於和while循環中scanf有關。
解析scanf:scanf :當遇到回車,空格和tab鍵會自動在字符串後面添加'\0',但是回車,空格和tab鍵仍會留在輸入的緩沖區中。。 gets函數從scanf執行後留下的回車作為第一個gets函數字符串參數。
scanf能完美解決
- #include
- #include
- #include
- using namespace std;
- int main()
- {
- int m = 0;
- char str[5];
- scanf("%d",&m);
- //gets(str);
- //scanf("%s",str);
- cin >> str;
- printf("%d\n",str[0]);
- return 0;
- }
cin可以,scanf也可以,gets則處理同上
個人猜測是編譯優化問題,還沒有明確答案