[英]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
将该行作为字符串读取。 然后,您可以使用函数sscanf
或strtol
来转换该字符串的各个数字。
如果该字符串中最多应该有 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.