【问题标题】:Is it possible to terminate a program if the user enters an invalid value?如果用户输入无效值,是否可以终止程序?
【发布时间】:2020-05-12 08:00:02
【问题描述】:

我希望程序在用户输入不是“A”或“B”的字母时立即终止。即使用户为输入 2 输入“A”或“B”,是否可以只打印输入 1 的默认大小写?我尝试了 stdlib.h 中的 exit() 函数,但我似乎无法在代码中找到可以工作的位置。我知道嵌套的 switch 语句也可以工作,但完整的程序需要 8 个输入,我必须嵌套 8 次

例如: 输入一个值:C 输入一个值:A 首次输入的字母无效!终止程序...

#include <stdio.h>

int main()
{
    char input1;
    printf("Enter a value: ");
    scanf(" %c", &input1);

    char input2;
    printf("Enter a value: ");
    scanf(" %c", &input 2);

    char A = 'A';
    char B = 'B';

    switch(input1){
        case 'A':
        printf("Your letter is A");
        break;

        case 'B':
        printf("Your letter is B");
        break;

        default: 
        printf("Invalid letter for first input! Terminating program...");
        break;
    }

    switch(input2){
        case 'A':
        printf("First letter of the alphabet");
        break;

        case 'B':
        printf("Second letter of the alphabet");
        break;

        default: 
        printf("Invalid letter for second input! Terminating program...")
        break;
    }

    return 0; 
}

【问题讨论】:

  • 为什么将出口放在您的第一个默认情况下不起作用?如果您需要该输出,只需将其放在打印之后。或者重构您的代码以在输入时验证输入,而不是在输入之后验证。
  • 我运行了代码,即使退出是第一个默认情况,它也会打印出第二种情况。分配要求我们构建程序,以便用户必须在返回之前输入所有值
  • scanf 是在回车后才触发的,没有缓冲的读取没那么容易,可以使用ncurses 或者stackoverflow.com/questions/1798511/…

标签: c


【解决方案1】:

如果我正确理解了你的问题,这应该可行

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

int main()
{
    char input1;
    printf("Enter a value: ");
    scanf(" %c", &input1);

    char input2;
    printf("Enter a value: ");
    scanf(" %c", &input2);

    char A = 'A';
    char B = 'B';

    switch(input1){
        case 'A':
        printf("Your letter is A");
        break;

        case 'B':
        printf("Your letter is B");
        break;

        default: 
        printf("Invalid letter for first input! Terminating program...");
        exit(1);
    }

    switch(input2){
        case 'A':
        printf("First letter of the alphabet");
        break;

        case 'B':
        printf("Second letter of the alphabet");
        break;

        default: 
        printf("Invalid letter for second input! Terminating program...");
        exit(1);
    }

    return 0; 
}

【讨论】:

  • 我假设第二个开关默认值也应该调用 exit()。这样,如果输入不正确,则不会执行 switch 后面的任何代码。另外,当出现错误时,我不会使用零作为 exit() 的参数。
  • @maxrt exit(1) 是不可移植的。我建议exit(EXIT_FAILURE)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-18
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多