当前位置: 首页 > 知识库问答 >
问题:

如果输入了特定值,如何退出scanf函数?

蓬兴国
2023-03-14

我希望scanf读取一些数据并将其存储到多个变量中。但是,如果第一个变量,即数量为0,则scanf需要退出请求用户输入,因为我的后续while循环取决于该值,即数量。如果该值不为零,则继续循环并执行进一步的操作,否则不执行。

#include <stdio.h>

struct inventory {

    int quantity, category;
    double price, soldByWeight;
    char name[20];
};

void main(void) {

    struct inventory arr[5] = { 0 };

    printf("Enter values: \n");

    for (int i = 0; i < 5; i++) {

        scanf("%d%*c%d%*c%lf%*c%lf%*c%19[^\n]", &arr[i].quantity, &arr[i].category, &arr[i].price, &arr[i].soldByWeight, arr[i].name);

        /*while (arr[i].quantity != 0) {

            do some stuff 
        }*/
    }
    return 0;
}

样品输入1: 21,1,1.5,1,马铃薯

样本输入2:0

此处,在示例输入2之后,如果输入0并按enter键,scanf仍在等待用户的输入。在输入0和enter键后,如何退出scanf函数。%*c用于刷新示例输入中使用的逗号。

共有2个答案

颛孙航
2023-03-14

您可以使用fgets读取整行内容。如果该行仅包含0,则中断for循环。否则,使用sscanf解析字段。

#include <stdio.h>

struct inventory {

    int quantity, category;
    double price, soldByWeight;
    char name[20];
};

int main() {
    struct inventory arr[5] = { 0 };

    char buf[2048];

    printf("Enter values: \n");

    for (int i = 0; i < 5; i++) {

        fgets(buf, sizeof(buf), stdin);
        if ((buf[0] == '0') && ((buf[1] == '\n') || ((buf[1] == '\r') && (buf[2] == '\n')))) {
            break;
        }

        sscanf(buf, "%d,%d,%lf,%lf,%19[^\n]", &arr[i].quantity, &arr[i].category, &arr[i].price, &arr[i].soldByWeight, arr[i].name);
        printf("%d %d %lf %lf %s\n", arr[i].quantity, arr[i].category, arr[i].price, arr[i].soldByWeight, arr[i].name);
    }
    return 0;
}
江俊能
2023-03-14

首先,我建议您将整行输入读入字符串。

然后使用sscanf解析字符串,并始终检查它返回的内容。

最后,如果sscanf返回1,则选中arr[i]。数量查看其值是否为零。

作为一种替代方法,您也可以使用例如strtol预先检查输入0(在调用sscanf之前)。

 类似资料:
  • 如果输入了非int值,如何创建一个会中断的while循环? 例如,如果用户输入字符串、double或int以外的其他基本类型,循环将退出。

  • 我试图清除一个输入的值取决于它是否找到一个id如果它找到一个现有的id js更新的值的输入但如果它不保持最后一个找到但我需要有明确的值,有人能告诉我怎么了吗:

  • 您好,我有一个值为0-380的输入范围,我想禁用一些值,比如ID 30。因此,当我选择29并按下右箭头时,它必须更改为31。

  • 我有一个输入,当按“回车键”调用一个函数来重新加载列出的项目时,我需要。为此,我正在使用 当在loadItems调用中使用常量值时,这种方法效果很好,但只要我想传递输入值,就会出现一个错误: 这就是我得到的

  • 我正在开发一个程序,它会要求用户输入一个整数,然后输入另一个,并将它们作为图点。然后它会告诉他们之间的距离。用户必须输入一个整数或按“Q”退出。如果它是其他任何东西(不是整数或字母“Q”),它会告诉他们那是不正确的,请再试一次。我以为这就是我可以实现的方法,但它返回错误。非常感谢您的帮助! 如果我没有注释掉最后一个else语句,它就会默认为该语句,并且永远循环我的错误消息。

  • 代码: 我已经翻遍了方法,没有找到,这并不意味着;然而,它不在那里。 任何帮助都很感激。谢了!