我从用户那里接收10个号码(用户在提示时输入它们,并且数字用逗号分隔,如下:245645,-243,4245)。如何将这些元素放入数组中?如下所示,我使用了scanf
,但这并不像我希望的那样有效。任何建议将不胜感激。
//User will pass ten numbers, separated by commas. This is to be put into an array.
#include <stdio.h>
int main ()
{
int A[10]; // array to contain in users input.
printf("Enter your numbers: ");
scanf("%d", &A[10]);
return 0;
}
答案 0 :(得分:0)
您必须在scanf
中使用逗号:
for(int i=0; i<10; i++) { /* for each element in A */
if(0==scanf("%d,", &A[i])) { /* read a number from stdin into A[i] and then consume a commma (if any) */
break; /* if no digit was read, user entered less than 10 numbers separated by commas */
/* alternatively error handling if fewer than 10 is illegal */
}
}
答案 1 :(得分:0)
我不会为你写整件事。 但我绝对可以提供帮助。 其中一种方法是:
fgets()
可能是?strtol()
可能是?','
个字符,并在','
strchr()
之后设置指向下一个索引的指针?以下代码可以完成一半的工作。唯一剩下的部分是从用户获取字符串并验证它。 预先声明和初始化字符串的意图是更加强调对初学者来说很复杂的数据的实际解析(没有冒犯)。
在我们查看下面的代码之前,我们先阅读一些内容。
我已经承认这可能不是实现它的最佳方式,我很乐意同意下面的代码可以通过添加各种错误检查以千种方式变得更好,但我留给你探索并实施。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void)
{
int i = 0, j = 0;
char *Str = "1,11,21,1211,111221,312211,1234,4321,123,789";
char *ptr;
long ret;
long array[10] = { [0 ... 9] = 0 };
// So, lets assume step 1 and 2 are taken care of.
// Iterate though the data for 10 times
for(i = 0; i < 10; i++)
{
ret = strtol(Str, &ptr, 10);
// Check if its a number
if(ret != 0)
{
// Its is a number!
// Put it in the array
array[j] = ret;
// Increment the index so that next number will not over-write the existing one
j++;
// Find the next ',' in the string
Str = strchr(Str, ',');
if(Str == NULL)
{
// Handle this condition that there are no more commas in the string!
break;
}
// Assuming that the ',' is found, increment the pointer to index next to ','
Str++;
}
}
// Print the array
for(i = 0; i < j; i++)
printf("%ld\n", array[i]);
}
这将打印以下输出:
1
11
21
1211
111221
312211
1234
4321
123
789
希望我能帮助你,祝你好运。