是/否不起作用

时间:2015-07-29 07:31:31

标签: c

do {
        p++;
        printf("Enter your name: ");
        scanf("%s", &string);
        fprintf(fw, "%d\n%s\n",p, string);
        printf("Enter your telephone number: ");
        scanf("%d",&cislo);
        fprintf(fw, "%d\n",cislo);
        printf("If u want to add more datas press Y otherwise press N ");
        c = getchar();
        while (getchar() != '\n')
            ;
        if ( c == 'Y')
            k++;
        else
            printf("You decided not to continue.");
    } while (p < k);

你好,代码的结尾似乎不起作用,因为当我输入Y它显示“你决定不继续”这是废话因为它应该将k增加1并再去一次(p nad k在程序的开头,p = 0; k = 1;你能告诉我解决方案吗?

2 个答案:

答案 0 :(得分:1)

在读取其他内容之前,您应该清空stdin缓冲区。

void emptyBuffer() {
    char c = 'a';
    while (c != '\n' && c != EOF) {
        c = getchar();
    }

    return;
}

此函数清空stdin缓冲区。

    printf("Enter your name: ");
    scanf("%s", &string);
    emptyBuffer();

    fprintf(fw, "%d\n%s\n",p, string);
    printf("Enter your telephone number: ");
    scanf("%d",&cislo);
    emptyBuffer();

    fprintf(fw, "%d\n",cislo);
    printf("If u want to add more datas press Y otherwise press N ");
    c = getchar();

因为当您使用getchar()时,您可能会收到上一个问题(/ answer)的最后一个'\n'

和BTW(根据之前的评论) 你应该使用:

   if ( c == 'Y' || c == 'y' )

更加用户友好:)

答案 1 :(得分:0)

使用c = getchar();,您正在阅读电话号码输入的'\n'(返回)。

为了避免这种情况,您必须刷新stdin,或者在这种情况下,请拨打getchar()两次。

另一种简单的方法是使用scanf来完成工作:

scanf("%s", c);
if (( c[0] == 'y') || ( c[0] == 'Y'))
   k++;

修改

根据OP的要求,完整的解决方案可能是:

do
{
    printf("Enter your name: ");
    scanf("%s", &string);
    fprintf(fw, "%d\n%s\n",p, string);

    printf("Enter your telephone number: ");
    scanf("%d",&cislo);
    fprintf(fw, "%d\n",cislo);

    printf("If u want to add more datas press Y otherwise press N: ");
    scanf("%s", c);

} while (( c[0] == 'y') || ( c[0] == 'Y'));

printf("You decided not to continue.\n");