C 中的简单程序不起作用

Simple program in C doesn't work

我是 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);
  }
}

问题在于,当我第一次输入字母时,它会按照我的要求进行操作:取一个数字,然后 return 将其显示在屏幕上。紧接着它设置 10 on it's on own!

这是输出:

>> 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 

这是怎么回事?为什么要这样做?我没有输入任何东西或按下任何东西。

标准便携式 C API 不适合处理击键。要 "enter r" 您需要按 "r" "return" 这样您使用 getchar() 的程序将立即收到它们。您需要使用 ncurses or cornio.

当您输入 "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 分配给某些东西,否则你会得到未定义的行为

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;

如果使用 Windows,则使用 "conio.h"

中的 _getch()

此外,与其检查 10(这是换行符而不是 Return),不如检查 \r,这是 ENTER 键 returns。当可以使用更具描述性的转义符时,切勿使用文字值:

  • 换行=\n
  • Return = \r

等等