1

今天在用c语言测试,做了两个小c文件

主程序

#include<conio.h>
void testing();
int main()
{
    testing();
    getch();
    return 0;
}

测试.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 上编译了它。

4

4 回答 4

4

因为getchar()在输入缓冲区中留下了换行符。您可以使用另一个 getchar() 来吃换行符。

ch=getchar();
getchar();

或者使用 scanf 吃掉前导空格:

scanf(" %c", &ch);

这样,前面的所有内容都\n将被忽略。

于 2012-10-19T15:34:26.127 回答
2

打印字符后,您重新调用testing(). 这让你循环测试。删除这条线,你会没事的。

你没有故意是递归。这是计算机编程的一个充满激情的方面,但不是您打算做的。

还有一件事,当您按下回车键以验证您的输入时,请考虑再次读取以消耗输入缓冲区中留下的换行符。

于 2012-10-19T15:34:00.600 回答
2

您的问题可能是由于您在循环中递归调用 testing() 函数。

于 2012-10-19T15:38:32.037 回答
0

它显示两次,因为你在那里有递归,这个函数应该做什么,你有无限递归?

于 2012-10-19T15:34:26.250 回答