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 faz代码>2)while((faz=getchar())!=EOF&&faz!='\n')
3)else{returnmain();}
使用intfaz代码>charfaz。。。而((faz=getchar())!=EOF | | faz!='\n')
在char
类似于unsigned char
的平台上可能是一个无限循环,而char
类似于signed char
时,对于某些字符来说是一个问题。