English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

#include

void main(void)
{
char aaa;
while((aaa=getchar()) != '\x0d')
printf("%cin@@@",aaa);
}
=================================
當我執行的時候輸入 a
結果出現 acin@@@
cin@@@

不是應該要只出現acin@@@嗎??
是哪裡寫錯了..麻煩幫我看一下

2007-01-30 12:50:02 · 3 個解答 · 發問者 阿儂 2 in 電腦與網際網路 程式設計

3 個解答

while((aaa=getchar()) != 'x0d')
改成
while((aaa=getchar()) != 0x0a)
就可以了
換行雖然是0d0a,不過通常都只會有0a出現,
所以偵測0d會出錯。

2007-01-30 18:56:01 補充:
另外字碼的部分不可以用單引號框起來
要用單引號框的話要改成
'\\n'

2007-01-30 13:54:32 · answer #1 · answered by poolqa 3 · 0 0

我不懂 x0d 是什麼,是不是 0x0D ?
字元與字串的不同,在於有無「結束字元」。因為字元後面沒有結束字元,所以電腦以迴圈讀取字元時,可能會讀到字元後面的亂碼或資科。而字串有結束字元,當電腦讀取字串,讀到結束字元時,電腦會自動停止讀取結束字元後面的亂碼或資科。
所以程式碼是正確的,只是…程式有 bug 而已。
//Power by Microsoft Visual Studio 2005
//可以使用 Dev-C++ 編譯此程式
#include
#include
int main(int argc, char *argv[]){
//=====START=====//
char A[2];
do{
printf("Input a char: ");
scanf("%s",A);
printf("%s\\n",(A[0]!='G')?"":A);
}while(A[0]!='G');
//=====END=====//
system("PAUSE");
return 0;
}

2007-01-30 13:47:21 · answer #2 · answered by Big_John-tw 7 · 0 0

getchar() 也會把換行字元讀取進去。
所以你程式的流程應該如下:

aaa=getchar(); // aaa='a'
aaa != 'x0d' // 'a' != 'x0d'
printf("%cin@@@", aaa); // 印出'a'
aaa=getchar(); // aaa='\n' (換行符號ENTER)
aaa != 'x0d' // '\n' != 'x0d'
printf("%cin@@@", aaa); // 印出'\n'in@@@,也就是換行印出in@@@
aaa=getchar(); // 再次進入while loop等待你輸入。

總結,
所以你的畫面會是
ain@@@
in@@@

一個解決的方法如下:
多加上一個getchar()將讀取'\n',
這樣就不會出現你說的第二行in@@@出現。
#include
void main(void)
{
char aaa;
while((aaa=getchar()) != 'x0d'){
printf("%cin@@@",aaa);
getchar(); // 讀取掉'\n'
}
}
至於'x0d'這是什麼,我就看不懂了。
什麼時候會跳出loop,有請高手指點了。

2007-01-30 13:38:46 · answer #3 · answered by Anonymous · 0 0

fedest.com, questions and answers