我有:
#include <stdio.h>
/* Copy input to output; 2nd version. */
main(void)
{
int c;
while ((c = getchar()) != EOF)
putchar(c);
return 0;
}
我想通过输入行尾字符来终止while循环。
我尝试过输入:
"\t"
"\0"
%d
%f
%c
%x
%n
EOF
"EOF"
\nEOF
int
float
char
long
long long
array
1 => 10
all letters
all symbols on keyboard
.
.
.
问题:我正在寻找什么神奇的EOF角色?
* 我很抱歉,如果这对你来说是一个非常简单的问题,但请保持愉快,我只是一个初学者,想要学习一些东西。
答案 0 :(得分:2)
在Windows上, Ctrl + Z ; 在Linux上, Ctrl + D 。
答案 1 :(得分:2)
没有EOF
个字符。 “EOF”是表示“文件结束”已满足的逻辑条件。
在Linux机器上,您可以通过在行的开头按 Ctrl + D 来“发出信号”标准输入EOF
条件。
Windows系统保留一个字符Ctrl+Z
,其格式为0x1A
十六进制,表示此“文件结束”条件。您可以按 Ctrl + Z 输入此字符。但它仍然不是真正的EOF
字符。相反,它是Windows中的一种约定。
答案 2 :(得分:1)
你去@Andy。你只是偶然使用了一个int而不是char c。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char c;
while ((c = getchar()) != '\t') // while input != tab, remember to use single
putchar(c); // quotes for characters '\n' etc.
system("pause");
return 0;
}
如果您对UNIX / LINUX系统中的信号感到好奇,这段代码可能有所帮助,为我的一个OS实验室编写了这个代码。本质上,程序一直要求用户输入。但是,当您尝试在开头使用 ctrl + z 或 ctrl + c 退出时,它不会t允许你,因为父进程忽略了信号,并由子进程的信号处理程序处理。请注意,父母在开始时正在睡觉,但是当它醒来时会杀死子进程并结束该程序。
#include <stdio.h>
#include <signal.h>
#include <malloc.h>
#include <sys/types.h>
#include <sys/wait.h>
#define maxLength 1024
//****************************************
// Signal Handlers For Child Process
//****************************************
void ctrlchandler(){
signal(SIGINT, SIG_IGN); //Ignore ctrl-c
write(1, "Don't even think about it!", 26);
}
void ctrlzhandler(){
signal(SIGTSTP, SIG_IGN); //Ignore ctrl-z
write(1, "Nice Try.", 9);
}
//****************************************
// Main Program
//****************************************
int main(int argc, char* argv[]){
pid_t pid;
int status;
//Dynamically allocate char array for input line
char *inputLine = (char*)malloc(maxLength*sizeof(char));
//Ignore Ctrl-z and Ctrl-c
signal(SIGINT, SIG_IGN);
signal(SIGTSTP, SIG_IGN);
//Fork Process
if((pid = fork())<0){
//If fork fails
printf("Fork Child Process Faild.\n");
}
//Parent Process
else if(pid != 0){
printf("Parent: My child %d has been spawned.\n",pid);
printf("My pid is %d\n",getpid());
sleep(30);
kill(pid, SIGKILL);
if(waitpid(pid, &status, WUNTRACED))
printf("Child %d has terminated abnormally.\n",pid);
}
//Child Process
else{
sleep(1); //Wait for parent to output first
while(1){
signal(SIGTSTP, ctrlzhandler);
signal(SIGINT, ctrlchandler);
printf("Enter Input:");
fgets(inputLine, maxLength, stdin);
}
}
//Free allocated char array
free(inputLine);
return 0;
}
答案 3 :(得分:0)
main()
{
printf ("%d=%x sizeof=%d\n", EOF, EOF, sizeof(EOF));
}
输出结果为:
-1=ffffffff sizeof=4
EOF
不是char
,而是int
如果您输入表示文件结尾的控制序列 - 它将被翻译为int
,其值为-1