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
等等
我是 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
等等