第一次在这里问一个问题。抱歉,如果已经有关于此的线索,但我有一些搜索,并没有找到我认为我正在寻找的东西。我是C的新手,正在为我的微控制器系统课程做一些功课。我们目前正在进行简单的练习,然后才进入嵌入式C,我正在尝试编写一个程序,该程序将包含由逗号分隔的10个数字组成的一行文本,并填充int
个数组。它。作为提示,我们被告知要使用substring
和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
感谢任何可以提供帮助的人! 克里斯
答案 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";