首页 > 解决方案 > 我可以输入 int 或终止 scanf 函数吗?

问题描述

我们学校课的任务是输入一些整数。我们不知道会有多少。

我想知道是否有可能格式化scanf存储整数或按回车键自行终止的函数。

我可以以某种方式将scanf("%d")仅存储整数和scanf("%[^\n])终止scanf函数的方法放在一起吗?

我所知道的是我不能使用scanf("%d%[^\n]),因为scanf正在等待那个我不想输入的整数,因为我已经存储了我必须输入的所有整数。

我真的不喜欢将所有这些整数的字符串存储到一个数组中,然后将其转换为具有确切数字的另一个数组的元素。

标签: cscanf

解决方案


scanf功能难以正确使用。

相反,一次读一行fgets。如果输入的字符串只是换行符,则退出循环。如果没有,请使用strtol解析值。如果结束指针指向输入末尾的换行符,您将知道是否只输入了一个整数。

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

int main()
{
    char line[100], *p;
    long val;

    while (fgets(line, sizeof(line), stdin)) {
        // if enter was pressed by itself, quit loop
        if (!strcmp(line, "\n")) {
            break;
        }

        errno = 0;
        val = strtol(line, &p, 10);
        if (errno) {
            perror("error reading value");
        } else if ((p != line) && (*p == '\n')) {
            // a valid integer was read
            printf("read value %ld\n", val);
        } else {
            // a non-integer was read or extra characters were entered
            printf("not a valid integer: %s", line);
        }
    }
    return 0;
}

推荐阅读