2016-04-09 29 views
-2

我是C新手,目前正在製作教程。C中的簡單程序不起作用

我決定結合兩個練習,我想輸入 只要我不只是做< return>。這是我的代碼至今:

#include<stdio.h> 

char letter; 
int i=0; 

int main() { 
    while (i==0) { 
    printf(">> "); 
    letter = getchar(); 
    printf("%d\n", letter); 
    if (letter==10) {  //10 is the ASCII id for <return> 
     printf("End\n"); 
     i = 1; 
    } 
    printf("You've entered %c\n", letter); 
    } 
} 

的問題是,當我進入的第一次的信,它不會是我想要它做的事情:取號,並返回它在屏幕上。之後直接在它自己的上設置10

這是輸出:

>> r //I've entered 'r' 
114 
Das Zeichen ist r 
>> 10 //I've entered nothing. It entered that on it's own 
End 
The letter is 

這到底是怎麼回事?它爲什麼這樣做?我沒有輸入任何東西或者壓下任何東西。

+0

你從不一個值分配給'zeichen'。它應該是什麼?我想信和zeichen應該是相同的變量,因爲你甚至不聲明zeichen。 – vmonteco

+0

是啊我是德國人我忘了翻譯我編輯了帖子 –

+0

你做了一個編輯......但是if語句中的「zeichen」也應該是「letter」? – hft

回答

1

當您輸入"r"時,還可以按Enter鍵('\n',等於ASCII 10)。最短的方法是添加另一個getchar()插入消耗「\ n」的

int main() { 
    while (i==0) { 
    printf(">> "); 
    letter = getchar(); 
    getchar(); 
    printf("%d\n", letter); 
    if (zeichen==10) {  //10 is the ASCII id for <return> 
     printf("End\n"); 
     i = 1; 
    } 
    printf("You've entered %c\n", letter); 
    } 
} 

也有其比較信價值的另一個一小段路後早期它分配如下列:

int main() { 
    while (i==0) { 
    printf(">> "); 
    letter = getchar(); 
    if(letter == '\n') 
     continue; 
    printf("%d\n", letter); 
    if (zeichen==10) {  //10 is the ASCII id for <return> 
     printf("End\n"); 
     i = 1; 
    } 
    printf("You've entered %c\n", letter); 
    } 
} 

然而,你仍然需要分配zeichen的東西,否則你會得到未定義行爲

0

標準的可移植C API不能很好地處理按鍵操作。要「輸入r」,您需要按「r」「返回」,以便您的程序使用getchar()將立即收到它們。您需要使用ncursescornio

+0

那我該怎麼做? (我是C的完整noob) –

+0

@Mr。 Squiddy如果你的系統是linux,你需要包含「ncurses.h」並閱讀文檔。如果你的系統是Windows,也許Windows也有ncurses(但我不確定),但我確定存在cornio:https://sourceforge.net/projects/myconio/ – jdarthenay

0

while (i==0) { printf(">> "); letter = getchar(); printf("%d\n", letter); if (zeichen==10) { //10 is the ASCII id for <return> printf("End\n"); break; }

使用break語句而不是i=1;

+0

這也起作用了! –

0

如果使用的是Windows,使用_getch()從「CONIO.H」

此外,而不是用於10檢查(這是換行符不返回),最好是檢查\r,這是ENTER鍵返回的內容。從不使用文字值時更具描述性的逃逸可用於:

  • 換行符= \n
  • 回報= \r