5

第一次在这里提问。抱歉,如果已经有关于此的主题,但我进行了一些搜索,并没有完全找到我认为我正在寻找的东西。我对 C 语言非常陌生,并且正在为我的微控制器系统课程做一些家庭作业。在我们进入嵌入式 C 之前,我们目前正在通过简单的练习,我正在尝试编写一个程序,该程序将接收一行由逗号分隔的 10 个数字组成的文本,并int用它填充一个 s 数组。作为提示,我们被告知使用substringand atoi。我想我已经接近正确了,但我无法让它正确输出我的数字。

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

这是我的代码:

#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

4 回答 4

3

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

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

然后您需要以某种方式处理此字符串以将每个数字取出并放入您的int.

于 2013-03-07T23:07:57.953 回答
1

首先,您应该声明 astring如下:

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()函数将它们转换为整数并打印出来。您可以查看此功能参考strtok()获得更好的理解。

于 2013-03-07T23:20:35.980 回答
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 成员,每个成员都有自己的索引,而不是整个字符串。

于 2013-03-07T23:01:10.150 回答
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";

于 2013-03-07T23:07:15.150 回答