繁体   English   中英

如何在单行输入中获取整数数组[在C中]

[英]How to take a integer array in a single line input [in C]

如何在 C 语言中获取单行输入并将值存储在其数组中

#include <stdio.h>

int main()
{
    int arr[5];

    scanf("%d", &arr[0]);

    for(int i=1; i <= 5; i++){
        printf("%d\n", arr[i-1]);
    }

    return 0;
}

如果我理解正确,您想从用户那里获取输入并将其存储在您的数组中,然后您想打印该数组。

首先,如果您需要来自用户的输入,我喜欢打印一行来询问用户,所以让我们将其添加到您的代码中。

#include <stdio.h>

int main()
{
    int arr[5];

    printf("Please enter 5 numbers:\n");
    scanf("%d", &arr[0]);

    for(int i=1; i <= 5; i++){
        printf("%d\n", arr[i-1]);
    }

    return 0;
}

现在我可以看到您尝试将值存储在数组中,但您只为第一个( arr[0] )执行了此操作。 您应该为此创建一个循环(就像您在代码末尾所做的那样)。 让我们添加这个循环。

#include <stdio.h>

int main()
{
    int arr[5];

    printf("Please enter 5 numbers:\n");
    for(int i=1; i <= 5; i++){
        scanf("%d", &arr[i-1]);
    }

    for(int i=1; i <= 5; i++){
        printf("%d\n", arr[i-1]);
    }

    return 0;
}

完成,它现在应该可以工作了。

只是让您知道,您可以在代码的开头定义一次,而不是编写5 (数组的大小)。 (如果有时你想改变大小,你只需要改变一次。)

#include <stdio.h>
#define N 5

int main()
{
    int arr[N];

    printf("Please enter %d numbers:\n", N);
    for(int i=1; i <= N; i++){
        scanf("%d", &arr[i-1]);
    }

    for(int i=1; i <= N; i++){
        printf("%d\n", arr[i-1]);
    }

    return 0;
}

scanf用于解析空格分隔的数据,而不是面向行的数据。 如果您想阅读,最好使用 fgets。 如果要读取行,然后将行分解为空格分隔的数据,可以在 fgets 返回的缓冲区上使用 sscanf:

#include <stdio.h>

#define MAXINTS 100   /* maximum number of integers we can read */
#define MAXLINE 1024  /* maximum input line length */

int main() {
    char buffer[MAXLINE], *p;
    int data[MAXINTS];
    int count = 0, len;

    printf("Enter some numbers: ");
    fgets(buffer, sizeof(buffer), stdin);
    p = buffer;
    while (count < MAXINTS && sscanf(p, "%d%n", &data[count], &len) > 0) {
        ++count;
        p += len; }

    printf("Read %d numbers on a line:", count);
    for (int i = 0; i < count; ++count) printf(" %d", data[i]);
    printf("\n");
}

如果您希望您的程序最多读取单行输入的 5 个数字,那么我不建议您使用函数scanf 该功能对于基于行的用户输入通常不是很有用。 函数scanf将继续读取更多的输入行,直到用户输入正好 5 个数字或直到发生转换错误。

为了读取单行输入,您可以使用函数fgets将该行作为字符串读取。 然后,您可以使用函数sscanfstrtol来转换该字符串的各个数字。

如果该字符串中最多应该有 5 个数字,那么您可能需要一个循环最多迭代 5 次并尝试在每次循环迭代中转换一个数字。

或者,如果您使用的是sscanf ,您也可以尝试一次转换五个数字,使用格式字符串"%d%d%d%d%d"并将五个参数传递给函数sscanf 然后,您可以检查sscanf的返回值以确定实际转换了多少数字。

但是,如果您不想强制所有数字都在同一行,而只想从用户那里准确读取 5 个数字,那么解决方案会更简单。 您可以对scanf使用与printf相同的循环。

请注意,循环

for(int i=1; i <= 5; i++){
    printf("%d\n", arr[i-1]);
}

可以简化为:

for(int i=0; i < 5; i++){
    printf("%d\n", arr[i]);
}

根据家庭作业问题的社区指南,我暂时不会提供完整的代码解决方案。 如果您设法自己解决问题,您将学到更多。 但是,如果有必要,我会给你进一步的提示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM