1樓:匿名使用者
#include
#include
int main(void)
else
}if(f) printf("yes\n");
else printf("no\n");
} return 0;}
2樓:於苒琦芳澤
1.gets是以回車為結尾的.
你在字串中提前鍵入的回車
2.是快取區問題..
有可能是沒有在gets
之前清空快取區.
導致上文的輸入被當作gets的了
3樓:寇洋板炳君
因為你在使用gets之前還使用過別的讀入函式(或巨集),有的是不會把末尾的換行讀取掉的,就會留在緩衝區,當你呼叫gets時,把上一次的換行字元給讀取了,所以就像直接跳過了。
改善的方法是為gets函式上一句加上getchar();用於吸收回車。或是加fflush(stdin);重新整理緩衝區。
4樓:肥醉瑞雅寧
gets
和scanf混用時要在
scanf
後面加getchar
因為scanf
不接受回車和空格
所以要getchar過濾掉回車和空格
然後才能用gets來完整的接受
5樓:樊俐法雲霞
應該確保buffer的空間足夠大,以便在執行讀操作時不發生溢位。如果溢位,多出來的字元將被寫入到緩衝區後面的記憶體位置,這將破壞乙個或多個不相關變數的值。
可能是buffer緩衝區不夠大造成的,也或者異常終止是gets使用錯誤。
關於c語言裡的gets()問題,為什麼名字輸入被跳過?
6樓:淡若親風
gets函式可能把stdin緩衝區裡面的內容讀到陣列裡面,所以會被跳過
7樓:匿名使用者
c語言裡的gets()函式功能是從輸入快取中讀取多個字元,遇到回車符時,結束輸入。
當使用gets()函式之前有過資料輸入,並且,操作者輸入了回車確認,這個回車符沒有被清理,被儲存在輸入快取中時,gets()會讀到這個字元,結束讀字元操作。因此,從使用者表面上看,gets()沒有起作用,跳過了。
解決辦法:
方法一、在gets()前加fflush(stdin); //強行清除快取中的資料(windows下可行)
方法二、根據程式**,確定前面是否有輸入語句,如果有,則增加乙個getchar()命令,然後再呼叫 gets()命令。
方法三、檢查輸入結果,如果得到的字串是空串,則繼續讀入,如:
char str[100]=;
do while( !str[0] );
8樓:
在for迴圈之前加乙個getchar();就應該可以解決你的問題
c語言關於gets的問題(輸入出現了問題)
9樓:六翼幻世
輸入n的時候的回車被gets(a)收到了,然後你認為輸入a的時候的內容,被m接收了
gets()和scanf()不同gets()將回車之前的專字元全部取走,之後將屬回車變成』\0』並且取走;
如果scanf()後面緊跟gets()那麼要在兩個之間加入getchar()取走回車
如scanf("%c",&n);
getchar();
gets(str);
10樓:夏天的小紅花
這是由於抄程式在讀取數字時只讀取了前bai面的數字du部分,而把後面的回車符留zhi在了鍵盤緩dao沖區,所以在下面讀取字串時遇到這個回車符就結束了,也就是說程式讀到了乙個空的字串。另外,在下面複製字串的時候並沒有複製字串的結束符。下面的**改正了這些問題。
#include
#include
int main()
b[j]='\0';
printf("%s",b);
return 0; //有更改}
c語言問題,C語言問題。
考驕 用指標將兩個字串連結接起來,前一個while迴圈,確定s1字串走完,第二個while開始將s1的逐個字元複製給s1走完,也就是末尾,這樣就可以把字串都匯入到s1中 最後一個空寫的應該寫return s1 長魚修韋 很久沒碰這東西了。我來解釋下 第一個while的迴圈是為了讓指標指向第一個字串的...
C語言問題,c語言問題?
自我程式設計 列印輸出乙個ok。因為前面迴圈for語句有分號結束。所以後面的printf語句不在迴圈內,不受迴圈語句影響。 理佑平鄲胭 結果是22 7 7 8 22 你可以將 i i i i是先 1再計算,還有這裡的運算順序是從左到右,所以應該是7 7 i 14 8 22 前兩個相加時,i先加1,加...
c語言問題,C語言問題?
這個問題說難不難,但理解可能有點玄乎而已,但是打個比方來理解就太容易掌握啦!就是說scanf的認定讀取,比如你單純的scanf c ch 那麼實際上已經認定了第乙個字元出現就把它賦予給ch,如果是你的scanf c 前面多了乙個空格,所以就認定了出現第乙個空格後的字元賦予給ch,如果寫成這樣 sca...