【问题标题】:Use if statement to detect if user entered specific character or number使用 if 语句检测用户是否输入了特定的字符或数字
【发布时间】:2020-06-23 22:59:54
【问题描述】:

在我的 getInput 函数中,我正在扫描用户的输入。

如果用户输入'q''Q',我想打印用户希望退出的信息(从技术上讲,程序实际上不必“退出”)。

如果用户输入任何其他值,我想返回该值并继续运行我的程序。

所以,我的问题是:

如何测试某个字符值 int 到 char 的转换,类似于我在下面尝试的方法?

如果用户输入一个字符,我的程序会退出,如果用户输入一个整数,我的程序就会运行,但没有正确检测到'q''Q' 已被按下。

这是我目前的代码:

int getInput() {

  int numSets;
  char quitTest1 = 'q';
  char quitTest2 = 'Q';

  //get number of sets from user
  printf("\nEnter desired amount of random number sets (or 'q'/'Q' to quit): ");
  scanf("%d", &numSets);

  if (numSets == (int)quitTest1 || numSets == (int)quitTest2) {
    printf("Exited");
  }

  else {
    return numSets;
  }

}

我可能遗漏了一些主要原则,但我似乎在 Google 上找不到太多帮助。

感谢所有答案。

【问题讨论】:

  • 您已经描述了您正在尝试做的事情,但您忘记了提问。请编辑您的问题,使其提出具体的问题!
  • 您是否尝试过打印numSets 来检查您是否正在做您认为您正在做的事情?
  • 请注意,int result = scanf("%d", &numSets); 如果读取整数失败,将返回 0。此时,您可以选择尝试读取字符。或者,您可以放弃整个方法并使用 fgets 读取一个字符串,然后对其进行解析。

标签: c function char type-conversion int


【解决方案1】:

注意

scanf("%d", &numSets);

如果输入是一个字符,numSets 不会为 numSets 分配任何值,numSets 将保持其先前的值,在这种情况下,由于变量未初始化,该值是未知的,提前使用它会导致未定义的行为。

将输入作为char array 转换为charint 似乎是最好的选择。

Live sample here

int getInput() {

    char numSets[100];
    int number = -1;
    char q;
    char quitTest1 = 'q';
    char quitTest2 = 'Q';

    //get number of sets from user
    printf("\nEnter desired amount of random number sets (or 'q'/'Q' to quit): ");
    fgets(numSets, sizeof(numSets), stdin);
    if (sscanf(numSets, "%d", &number)){
        printf("%d", number); //testing
        return number;
    } 

    if (sscanf(numSets, "%c", &q) && (q == quitTest1 || q == quitTest2))
        printf("Exited");
    else{
        puts("Invalid input");

    return number; //will return -1;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    • 2012-12-29
    • 2019-03-09
    相关资源
    最近更新 更多