gpt4 book ai didi

c - 将 c 控制台输入拆分为整数

转载 作者:行者123 更新时间:2023-11-30 16:40:56 26 4
gpt4 key购买 nike

我有一个控制台输入空格分隔的 n 长度整数列表(n 通过控制台读入),需要将其拆分为整数并放置在大小为 n 的数组中。我已经尝试使用 fscan 和 fgets 进行此操作,要么是段错误,要么是控制台锁定而不让我进入列表。任何建议:

int main()
{
int n;
scanf("%d", &n);
int buffer = n + n -1;
char input[buffer];
//char * input;
//int buffer = n+n-1;
//fgets(input, buffer, stdin);
scanf("%*c", &input);
printf("c is %c", input[0]);
char * end;
long int l;
end = input;
int base = 10;
int ele = 0;
long int vals[n];
while(l = strtol(end, &end, base)){
vals[ele] = l;
ele += 1;
}
return 0;

最佳答案

您的编译器是否支持可变长度数组扩展:

#include <stdio.h>

int main (void) {

int n, tmp, ndx = 0;
if (scanf ("%d", &n) != 1 || n < 1) {
fprintf (stderr, "error: invalid input - n.\n");
return 1;
}
int a[n];

while (ndx < n && scanf ("%d", &tmp) == 1) {
a[ndx] = tmp;
printf ("a[%3d] : %d\n", ndx, a[ndx]);
ndx++;
}

return 0;
}

或者您选择动态分配数组:

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

int main (void) {

int n, *a, tmp, ndx = 0;
if (scanf ("%d", &n) != 1 || n < 1) {
fprintf (stderr, "error: invalid input - n.\n");
return 1;
}

if (!(a = calloc (n, sizeof *a))) { /* allocate/validate */
fprintf (stderr, "error: virtual memory exhausted.\n");
return 1;
}

while (ndx < n && scanf ("%d", &tmp) == 1) {
a[ndx] = tmp;
printf ("a[%3d] : %d\n", ndx, a[ndx]);
ndx++;
}

free (a); /* don't forget to free allocated memory */

return 0;
}

始终,始终,验证所有用户输入(在将转换后的值分配给数组之前)scanf 有一个返回值就是为了这个目的。您必须以某种方式处理匹配输入失败。

输入示例

$ cat dat/n_10_ints.txt
10
8572
-2213
6434
16330
3034
12346
4855
16985
11250

示例使用/输出

$ ./bin/readnints <dat/n_10_ints.txt
a[ 0] : 8572
a[ 1] : -2213
a[ 2] : 6434
a[ 3] : 16330
a[ 4] : 3034
a[ 5] : 12346
a[ 6] : 4855
a[ 7] : 16985
a[ 8] : 11250
a[ 9] : 1495

仔细检查一下,如果您还有其他问题,请告诉我。

关于c - 将 c 控制台输入拆分为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46460284/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com