【问题标题】:How to properly use scanf with char?如何正确使用scanf和char?
【发布时间】:2015-03-11 05:38:31
【问题描述】:

这是一个打印 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');
}

【问题讨论】:

标签: c char scanf do-while


【解决方案1】:

你必须替换

 scanf("%c", &flag);

scanf(" %c", &flag);

为了避免扫描空白系列[这里是\n,它存储在之前的ENTER键按下的输入缓冲区中]。

接下来,您必须重新考虑逻辑。我不明白检查输入反对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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    • 2015-03-26
    • 1970-01-01
    • 2012-07-10
    相关资源
    最近更新 更多