c函数调用错误

时间:2012-10-19 15:32:25

标签: c function loops

我今天用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上已经完成了它。

4 个答案:

答案 0 :(得分:4)

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

ch=getchar();
getchar();

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

scanf(" %c", &ch);

这样,以前的所有\n都将被忽略。

答案 1 :(得分:2)

打印完字符后,重新调用testing()。这让你循环测试。删除这一行,你就可以了。

你不是故意的recursion。这是计算机编程的一个激情方面,但不是你打算做的。

还有一件事,当您按Enter键以验证输入时,可以考虑再次读取输入缓冲区中剩余的换行符。

答案 2 :(得分:2)

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

答案 3 :(得分:0)

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