在C中只打印一次

时间:2016-10-05 13:59:17

标签: c

如果输入了一些错误输入,如何只打印一次语句: 例如: 如果键入kkk,则只打印一个语句而不是下面的例子。 样本输出:

你想再试一次(输入Y继续Q退出:kkk

错误:选择无效

你想再试一次(输入Y继续Q退出:错误:选择无效

你想再试一次(输入Y继续Q退出:错误:选择无效

你想再试一次(输入Y继续Q退出:

valid=0;
while (valid==0)
{
    printf("\nDo you wish to try again (Type Y to continue Q to quit:"); 
    // print statement request for input
    scanf(" %c", &choice); // get user input
    choice = toupper(choice);
    if((choice == 'Y') || (choice == 'Q')) 
        valid= 1;
    else 
        printf("Error: Invalid choice\n"); // statement
}

3 个答案:

答案 0 :(得分:3)

您的if (string.Equals(x.Name, y.Name) == false) return false; if (x.Price != y.Price) return false // ... others return true; 目前正在寻找单个字符(scanf),因此当您输入“kkk”并按Enter键时,它会接收输入四次:'k','k','k'和'\ n'

将其改为使用%c,然后只检查你得到的字符串的第一个字符。

或者如评论中所述,使用%s获取字符串并按上述方式处理它。

答案 1 :(得分:1)

由于scanf格式说明符"%c",您的代码每次检查1个字符。这意味着您的scanf退出,第一次在输入键之后,然后在下次调用时立即返回用户输入的所有字符。

要避免此行为,您可以在一段时间内完成整个输入。

您可以执行以下操作:

#include <stdio.h>
#include <ctype.h>

int main (void)
{
    int valid=0;
    char choice[32];
    size_t i=0;
    int data;

    while (valid==0)
    {
        printf("\nDo you wish to try again (Type Y to continue Q to quit):"); // print statement request for input

        fgets(choice, sizeof(choice), stdin);

        i=0;

        while ((choice[i] != '\0') && (valid == 0))
        {
            data = toupper((unsigned char)(choice[i]));

            if((data == 'Y') || (data == 'Q'))
            {
                valid= 1;
            }

            i++;
        }

        if (valid == 0)
            printf("Error: Invalid choice\n"); // statement
    }
}

正如你所看到的,我使用fgets从用户输入缓冲区,一次性存储整个输入(多个字符)。

之后你可以循环输入字符并检查其中一个字符是否是正确的选择

答案 2 :(得分:1)

  

如果一些错误的输入

,如何只打印一次语句
  • 这样做的一种方法是将输入扫描到字符串中,并将第一个元素与“&#39; Y&#39;和&#39; Q&#39;正如其他答案已经告诉你该怎么做。

  • 但是,如果您不想使用字符串,那么不使用字符串的第二种方法是在使用循环扫描输入后使用其他字符:

    int valid=0;
    char choice;
    
    while (valid==0)
    {
        printf("\nDo you wish to try again (Type Y to continue Q to quit:"); 
    
        scanf("%c", &choice); 
        // remove space before format specifier as you are consuming white spaces in the below loop
    
    
        //consuming additional characters mechanism:
    
        int consume_char; //to store consumed character (getchar() returns int)
    
        //the below loop consumes all additional characters
        while( ( (consume_char = getchar()) != '\n' ) && (consume_char != EOF)); 
    
    
        choice = (char) toupper(choice);
    
        if((choice == 'Y') || (choice == 'Q')) valid= 1;
        else printf("Error: Invalid choice\n"); // statement
    }
    return 0;