作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个控制台输入空格分隔的 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/
我是一名优秀的程序员,十分优秀!