如果用户输入特定数字,则停止 scanf 循环(不工作)C

Stop scanf loop if user enters a specific number (Not working) C

我看过多种解决方案,但 none 对我有用。

我要求用户循环输入数字,但如果用户输入特定数字,循环就会中断。

这就是我目前所知道的。

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

#define MAXNUMBERS 5

int getNumbers(int array[])
{
  int i;
  int n = 0;
  printf("Enter max. %d numbers, enter empty line to end:\n", MAXNUMBERS);

  for (i = 0; i < MAXNUMBERS; i++)
  {
    scanf("%d", &array[i]);
    fflush(stdin);
    n++;
    if (array[i] == '5')
    {
      break;
    }
  }
  return n;
}

int main()
{
  int array[MAXNUMBERS];
  int amount_numbers;
  amount_numbers = getNumbers(array);

  printf("Numbers entered: %d\n", amount_numbers);
  printf("First three: %d %d %d", array[0], array[1], array[2]);

  return 0;
}

如果用户输入 5,循环就会中断。

我以 5 为例,稍后我希望它与空行一起使用。但它甚至不适用于 5

输入5后一直提示用户输入其他号码。

if (array[i] == '5')

您正在检查 array[i] 是否等于 字符 ASCII value '5'

删除 '' 使其与整数 5 进行比较。

您正在检查一个整数是否等于字符“5”,然后将其转换为 ascii 值“5”。

试试这个:

if (array[i] == 5)

无视一切!

我应该写的

if (array[i] == 5)

没有引号!

我是个白痴!

我在这个错误上坐了 2 个小时...

实际问题是'5' != 5前者是字符5,实际上是ascii值,后者是数字5,因为你读的是整数,即在 scanf() 中使用 "%d" 说明符你应该使用 5,但如果它只是一个 int 变量会更好,你可以将它初始化为你想要的任何数字就像循环开始之前一样。

你的循环无论如何都是错误的,因为如果用户输入一个非数字值,那么你的程序将调用未定义的行为。此外,您已经使用 fflush(stdin) 调用了未定义的行为,所以

删除fflush(stdin)1

7.21.5.2 The fflush function

  1. If stream points to an output stream or an update stream in which the most recent operation was not input, the fflush function causes any unwritten data for that stream to be delivered to the host environment to be written to the file; otherwise, the behavior is undefined.

因此,对于像 stdin 这样的输入流,或者即使输入了最近的操作,行为也是 未定义

您必须检查该值是否被正确读取,然后检查循环条件是否等于您要停止循环的值,试试这个

int readNumber()
{
    int value;
    printf("input a number > ");
    while (scanf("%d", &value) == 1)
    {
        int chr;
        printf("\tinvalid input, try again...\n");
        do { /* this, will do what you thought 'fflush' did */
            chr = getchar();
        } ((chr != EOF) && (chr != '\n'));
        printf("input a number > ");
    }
    return value;
}

int getNumbers(int array[])
{
  int i;
  int stop = 5;

  printf("Enter max. %d numbers, enter empty line to end:\n", MAXNUMBERS);

  array[0] = 0;
  for (i = 0 ; ((i < MAXNUMBERS) || (array[i] == stop)) ; i++)
    array[i] = readNumber();

  return i;
}

1引用自C11草案1570