使用atoi填充一组int

时间:2013-03-07 22:58:57

标签: c arrays atoi

第一次在这里问一个问题。抱歉,如果已经有关于此的线索,但我有一些搜索,并没有找到我认为我正在寻找的东西。我是C的新手,正在为我的微控制器系统课程做一些功课。我们目前正在进行简单的练习,然后才进入嵌入式C,我正在尝试编写一个程序,该程序将包含由逗号分隔的10个数字组成的一行文本,并填充int个数组。它。作为提示,我们被告知要使用substringatoi。我认为我接近正确,但我无法正确输出我的数字。

另外,我不是在寻找勺子喂答案。一些提示就足够了。在寻求解决方案之前,我想尝试自己搞清楚。

这是我的代码:

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

int main(void)
{
    int a[10];
    char str[] = {1,2,3,4,5,6,7,8,9,10}; //contains string of numbers
    int i;
    puts("This prints out ten numbers:");

    for (i = 0; i < 10; i++)
    {
        a[i] = atoi(str);
        printf("%d", a[i]);
            //i'm guessing the problem lies in one of the above two lines
    }
    return 0;
}

这是输出以下内容:

This prints out ten numbers:
0000000000

感谢任何可以提供帮助的人! 克里斯

4 个答案:

答案 0 :(得分:3)

你说你必须使用逗号分隔的一行文本,但实际上你已经声明了一个包含十个(二进制)整数的char数组。要将其转换为字符串,您只需要执行此操作:

char str[] = "1,2,3,4,5,6,7,8,9,10";

然后,您需要处理此字符串以将每个数字输出到int数组中。

答案 1 :(得分:1)

首先,您应该声明string,如下所示:

char str[] = {"1,2,3,4,5,6,7,8,9,10"};

"使数字成为一个整数字符串。接下来,您需要对它们进行标记并使用<string.h>库,这将在这种情况下非常方便。

以下是您进行令牌化的方式:

首先定义一个令牌缓冲区:

char* token;

token = strtok(str,",");   //think of it as substring, the part of the str before the comma
for (i = 0; i < 10; i++)
{
    a[i] = atoi(token);
    printf("%d\t", a[i]);
            //i'm guessing the problem lies in one of the above two lines
    token = strtok(NULL, ","); //this line is also required for tokenizing the next element
}

使用strtok()函数,您可以分隔逗号之间的元素,并获得数字字符串。使用atoi()函数将它们转换为整数并打印出来。您可see this reference strtok()函数以便更好地理解。

答案 2 :(得分:0)

问题在于你是如何创建字符串的 请原谅我之前的回答,我误解了你的问题:

简单地说,声明应如下:

char str[] = "1,2,3,4,5,6,7,8,9, 10, 12";

接下来,您可以使用strtok将字符串分隔为一个字符串数组,这些字符串在分隔符中显示(在您的情况下是逗号),然后将数组成员传递给atoi

现在,为什么你的代码无效? 首先,字符应该用撇号包围,否则编译器会将你传递的数字作为ASCII值。

其次,C中的数组如下: char str[] = {'1', '2', '3', '4', '5'};并不是指逗号分隔的字符串,这些逗号分隔ARRAY成员,每个成员都在自己的索引中而不是整个字符串。

答案 3 :(得分:0)

您对char str[] = {1,2,3,4,5,6,7,8,9,10};的定义实际上已设定 字符的值为1到10。

在字符的ASCII图表中,这些是不可打印的控制字符。 写入'1'而不是1将把值设置为ASCII值1,即0x31。

另一个错误是你定义中的逗号只分隔定义中的值,所以结果是一个没有任何分隔的字符数组,所以12345678910。

所以正确的方法是 char str[] = "1,2,3,4,5,6,7,8,9,10";