我需要编写一个将接收x个数字的函数。 (x作为参数读入函数)数字可以在任意数量的空格和换行符之前和之间分隔,在输入最后一个数字后,换行符结束扫描。我想过使用字符串接受字符,并忽略任何无数字字符。输入数字字符时,它将被读入字符串,以及后面的任何数字字符。当在数字后面输入空格或换行符时,我希望将字符串中的数字输入数组。
因此,如果字符串包含{'1','3','2'},我想将“132”的值放入数组的单元格中。
我会设置一个计数器来计算一个数字放在一个数组中,当达到所需数量的数字时,该函数将返回。
这是我到目前为止所拥有的:
void read_vector(int* v, int n)
{
int value, i = 0, j = 0, k;
char num, str[9];
do
{
num = getchar();
if (num > 47 && num < 58)
{
while (i < 10)
{
str[i] = num;
i++;
num = getchar();
if (i = 9 || num < 47 || num > 58)
{
str[i] = '\0'
j++;
for(k = 1; k <= strlen(str); k++)
{
value += str[k - 1] * pow(10, (strlen(str) - k));
}
v[j] = value
if(j = n)
return;
}
}
}
}
while (1);
}
由于
答案 0 :(得分:2)
我会使用scanf系列的成员,具体取决于您的输入的呈现方式。 fscanf()几乎可以满足您的要求。
答案 1 :(得分:1)
我建议您使用strtok()
将字符串拆分为令牌,然后使用atoi()
,atol()
或atof()
将文本转换为数字。例如:
void
read_nums(int count, double *buffer, char *str)
{
int i;
char *str2;
// Read the first token
str2 = strtok(srt, " \n\t\r");
for (i = 0; i < count;) {
if (*str2)
// Convert and store the number
buffer[i++] = atof(str2);
// Read the next token
str2 = strtok(NULL, " \n\t\r");
}
}
我建议您查看一些关于这些函数的好文档,以确切了解如何实现它(我从未真正测试过这个示例,并且无法检查是否正确。)
答案 2 :(得分:0)
首先,您似乎对在C中使用比较运算符感到有些困惑。查看comparison and logical operators in C
现在你的ifs不会做你期望他们做的事情
并不是挑剔或任何事情,但你的第一个而循环可能更适合你的需要作为 for 循环,因为你还需要一个计数器。