Getchar behavior
linux EOF char ctrl + d, Windows enter CRT ctrl + z ( ). , . , , EOF char getchar
enter, ctrl + z.
:
Microsoft DOS Windows ( CP/M DEC) EOF. , ( " " ) ; ASCII Control-Z. 26. MS-DOS, Microsoft MS-DOS (COMMAND.COM) (, EDLIN), Control-Z , , / Control-Z . :
:
(, CSV-1203 [6]) - EOF . , Control + Z EOF MS-DOS Microsoft Windows, API- .
(, Visual Basic) "" EOF , (INPUT, LINE INPUT ..), , . .
26 " ", ASCII Substitute, .
:
#include <stdio.h>
int main() {
while(1) {
char c = getchar();
printf("%d\n", c);
if (c == EOF)
break;
}
return 0;
}
, Windows , EOF
(-1) , enter. - , a ^Z
( ). , :
- Microsoft Compiler
- GCC
- CMD
- bash windows
API Windows
@eryksun, ( ) Windows, conhost, " ctrl + d". , . IMHO, , 0. , , , stdin , .
:
- , , , conhost (, , ..).
- , ( )
- EOF ( 4 , ) ascii.
:
#include <windows.h>
#include <stdio.h>
#define Kev input_buffer[i].Event.KeyEvent
int main(void) {
HANDLE h_std_in;
DWORD read_count,
i;
INPUT_RECORD input_buffer[128];
h_std_in = GetStdHandle(
STD_INPUT_HANDLE
);
while(1) {
ReadConsoleInput(
h_std_in,
input_buffer,
128,
&read_count);
for (i = 0; i < read_count; i++) {
switch(input_buffer[i].EventType) {
case KEY_EVENT:
if (Kev.bKeyDown) {
if (Kev.uChar.AsciiChar != 4)
printf("%c", Kev.uChar.AsciiChar);
else
return 0;
}
break;
default:
break;
}
}
}
return 0;
}