如何正确使用scanf与char?

时间:2015-03-11 05:38:32

标签: c char scanf do-while

这是一个简单的代码,用于打印6个数字然后询问用户是否要继续,但在某些时候我的标志值继续更改。任何的想法? do-while块结束时的while只接受一个条件吗?

以下是代码:

void x(){
    int i = 1, cont = 0;
    char flag;

    do{
        if(cont == 6 && (flag != 'n' || flag != 'N')){
            printf("(S/N)");
            scanf("%c", &flag);
            printf("\n :%c \n", flag);
            if(flag == 's' || flag == 'S'){
                cont = 0;
                printf("\n");
            }
        }else{
            printf("%d, ", i);
            i++;
            cont++;
        }
    }while(flag != 'n' || flag != 'N');
}

1 个答案:

答案 0 :(得分:1)

你必须替换

 scanf("%c", &flag);

scanf(" %c", &flag);

以避免扫描空白族[此处,\n存储在输入缓冲区中,从之前的 ENTER 按键]。

接下来,您要重新考虑逻辑。我不明白检查输入agaisnt S的目的。恕我直言,没有必要。如果我已正确理解您的目的,您可以重新编写如下代码

#include <stdio.h>
#include <stdlib.h>

int main(){
    int i = 1, cont = 0;
    char flag;

    do{
        if(cont == 6 && (flag != 'n' || flag != 'N')){
            printf("(Y/N)");
            scanf(" %c", &flag);               //ignore whilespace-family
            printf("\n :%c \n", flag);
            if(flag == 'y' || flag == 'Y')     // check for Y or y and continue the next set to print
            {
                cont = 0;
                printf("\n");
            }
            else if (flag == 'n' || flag == 'N')   // check for n or N and break out of loop
                break;
            else
                printf("Invalid choice\n");        // ask the input again
        }else{
            printf("%d, ", i);
            i++;
            cont++;
        }
    }while(1);                                     // infinite loop
}