Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 读取字符后如何清除新行?_C_Scanf_Getchar - Fatal编程技术网

C 读取字符后如何清除新行?

C 读取字符后如何清除新行?,c,scanf,getchar,C,Scanf,Getchar,我的主函数是从函数返回到main()后打印两次 我很确定,当它返回到main时,如果我输入'\n',它会运行循环,而我无法修复这个问题 int main(){ char faz; printf("What do you want to do?\nWrite C to create\nWrite R to read\nWrite U to edit\nWrite D to delete\nWrite E to exit the program\n>"); while((faz = getc

我的主函数是从函数返回到
main()
后打印两次

我很确定,当它返回到main时,如果我输入
'\n'
,它会运行循环,而我无法修复这个问题

int main(){
char faz;

printf("What do you want to do?\nWrite C to create\nWrite R to read\nWrite U to edit\nWrite D to delete\nWrite E to exit the program\n>");
while((faz = getchar()) != EOF || faz != '\n')
{
  if(faz=='C') escreve();
  if(faz=='R') ler();
  if(faz=='U') editar();
  if(faz=='D') apagar();
  if(faz=='E') exit(1);
  else{ main();}
}

欢迎任何帮助,这是一个简单的图书馆管理程序

您正在递归调用main,这就是问题的原因,您正在调用
exit(1)
,这通常表示正常行为出现错误。我建议你做以下几点:

int main(){
 char faz;
 bool done=false;
 printf("What do you want to do?\nWrite C to create\nWrite R to read\nWrite U to edit\nWrite D to delete\nWrite E to exit the program\n>");
 while(((faz = getchar()) != EOF || faz != '\n') && (!done))
 {
    done=true;
    if(faz=='C') escreve();
    if(faz=='R') ler();
    if(faz=='U') editar();
    if(faz=='D') apagar();
    if(faz=='E');
    else{ 
        done=false;
        printf("Please enter a valid input\n");
    }

 }
 return 0;
}

我的老师不让我们用回归的方式…无论如何,谢谢你,我会继续尝试我修改了答案以满足你的需要,
'E'
的用户输入现在返回0,而不是OP的1。@chux我想他只是想在按下E时退出程序,退出(1)是错误的,因为它会使程序崩溃。返回除0以外的任何值的main通常表示错误。在这种情况下,选择E是一种正常行为,因此它应该返回0,而不是递归调用
main
函数,尝试在循环语句时使用
do。1)
int faz2)
while((faz=getchar())!=EOF&&faz!='\n')
3)
else{returnmain();}
使用
intfaz
charfaz。。。而((faz=getchar())!=EOF | | faz!='\n')
char
类似于
unsigned char
的平台上可能是一个无限循环,而
char
类似于
signed char
时,对于某些字符来说是一个问题。