вот фрагмент моей программы
#include<stdio.h>
#include<conio.h>
int main(void)
{
int c;
while ((c = getch()) != EOF)
{
if (c == '\t')
{
putchar('\\');
putchar('t');
}
else if (c == '\b')
{
putchar('\\');
putchar('b');
}
else if (c == '\\')
{
putchar('\\');
putchar('\\');
}
else if (c == '\r')
{
puts("\\n");
// putchar('\n');
}
else{
putchar(c);
}
}
return 0;
}
и я хочу закончить свой ввод, когда я ввожу EOF, но когда я ввожу ^ ZI, получим только это: , так как я могу ввести ^ Z для завершения ввода?
Ваша программа отлично работает... но getch
не делает именно то, что вы ожидаете.
getch
(from conio.h) и getchar
(из stdio.h) одновременно получают один символ за раз, но не на одном уровне. getchar
- более высокий уровень, и поэтому:
Ctrl-C
(точнее, Ctrl-C
рассматривается как сигнал SIG_INT)Ctrl-D
в Unix-Linux Ctrl-Z
в Windows как EOF С другой стороны, getch
является низкоуровневым (и существует в системах Microsoft, но не является стандартным C):
Ctrl-C
и Ctrl-Z
как этоCtrl-Break
Все примеры с использованием getch
работают одинаково: вы определяете, каков будет ваш конец входного символа, и вручную проверите его, нет волшебного EOF.
c
? Это должно бытьint
. Если этоchar
, то он никогда не может бытьEOF
.