我今天用c语言测试,我制作了两个小的c文件
的main.c
#include<conio.h>
void testing();
int main()
{
testing();
getch();
return 0;
}
testing.c
#include <stdio.h>
void testing()
{
char ch;
printf("Hello Testing\n");
do{
printf("Enter Character : ");
ch=getchar();
printf("You Entered : %c\n",ch);
testing();
}while(ch!='N');
}
我面临的问题是它从用户读取一个字符,然后循环两次,我不知道为什么
output
Hello Testing
Enter Character : k //(i entered k)
You Entered : k
Hello Testing// why this is displayed twice??
Enter Character : You Entered :// i don't press any key and it moves to next iteration
Hello Testing
Enter Character : // here i can enter character again and it happens again twice
我在Visual Studio 2012上已经完成了它。
答案 0 :(得分:4)
因为getchar()
在输入缓冲区中留下换行符。您可以使用另一个getchar()来换行。
ch=getchar();
getchar();
或者使用scanf来吃掉前导空格:
scanf(" %c", &ch);
这样,以前的所有\n
都将被忽略。
答案 1 :(得分:2)
打印完字符后,重新调用testing()
。这让你循环测试。删除这一行,你就可以了。
你不是故意的recursion。这是计算机编程的一个激情方面,但不是你打算做的。
还有一件事,当您按Enter键以验证输入时,可以考虑再次读取输入缓冲区中剩余的换行符。
答案 2 :(得分:2)
您的问题可能是因为您在循环中递归调用了testing()函数。
答案 3 :(得分:0)
它显示两次,因为你在那里有递归,这个函数应该做什么,你有无限递归?