在 c 中使用 scanf 停止无限 while 循环?

Stopping an infinite while loop using scanf in c?

我创建了一个程序,它接受 3 个由注释分隔的数字,我将使用它们进行一些计算。它将接受这些数字的用户输入,我正在使用 scanf 来接受。

这是我目前的情况:

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

int main(void)
{
    float a, b, c;

    bool continue_program = true;

    while (continue_program) {
        printf("Enter your coordinates: ");
        scanf("%f,%f,%f", &a,&b,&c);
        if(isdigit(a) && isdigit(b) && isdigit(c)){
            printf("Success!");
        } else {
            printf("Try again!");
        }
    }
}

示例输出:

Try again!Enter your coordinates: Try again!Enter your coordinates: Try again!Enter your coordinates: Try again!Enter your coordinates: Try again!Enter your coordinates: Try again!Enter your coordinates: Try again!Enter your coordinates: Try again!Enter your coordinates: Try again!Enter your coordinates: Try again!

我知道其他人也遇到过同样的问题,并通过了这些问题的答案,但无法让他们的实现适用于此代码。

你全错了 scanf() 将 return 匹配的参数数量,而你没有检查它。

此外,isdigit() 函数接受一个整数,如果传递的参数的 ascii 值对应于一个数字,return 非 0

要让你的程序在满足条件时停止,你应该在循环内更改 continue_program 的值,假设你想在 scanf() 没有得到时停止 3 要读取的浮点数,它将 return 一个不同于 3 的值,因此您可以将其设置为 if 条件

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

int main(void)
{
    float a, b, c;

    bool continue_program = true;

    while (continue_program) {
        printf("Enter your coordinates: ");
        if (scanf("%f,%f,%f", &a, &b, &c) == 3){
            printf("Success!");
        } else {
            continue_program = false;
            printf("Try again!");
        }
    }
}

根据 OP

的评论建议使用此解决方案
#include <stdio.h>
#include <math.h>
#include <ctype.h>
#include <stdbool.h>
#include <string.h>

int main(void)
{
    float a, b, c;
    char line[100];

    printf("Enter your coordinates: ");
    while (fgets(line, sizeof(line), stdin) != NULL) {
        size_t length;

        length = strlen(line);
        if (line[length - 1] == '\n')
            line[length - 1] = 0;
        if (strcmp(line, "0,0,0") == 0)
            break;
        if (sscanf(line, "%f,%f,%f", &a, &b, &c) == 3)
            printf("\tSuccess!\n");
        else
            printf("\tTry again!\n");
        printf("Enter your coordinates: ");
    }
}

您没有更新代码中 continue_program 的值。因此它的值保持为真,因此无限 loop.You 必须将其更新为假以停止它。