第一次在这里提问。如果已经有关于这个的帖子,我很抱歉,但我已经搜索了几次,没有找到我想要的东西。我对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感谢任何能提供帮助的人!克里斯
发布于 2013-03-08 07:07:58
您说必须使用一行用逗号分隔的文本行,但是您实际上声明了一个包含10个(二进制)整数的char数组。要将其放入字符串中,您只需执行以下操作:
char str[] = "1,2,3,4,5,6,7,8,9,10";
然后,您将需要某种方法来处理此字符串,以将每个数字取出并放入int数组中。
发布于 2013-03-08 07:20:36
首先,您应该声明一个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()函数进行更好的理解。
发布于 2013-03-08 07:01:10
问题在于如何创建字符串。
请原谅我之前的回答,我误解了你的问题:
简单地说,声明应该是这样的:
char str[] = "1,2,3,4,5,6,7,8,9, 10, 12";接下来,可以使用strtok将字符串分隔成字符串数组,省略分隔符(在本例中是逗号),然后将数组成员传递给atoi
那么,为什么你的代码不能工作呢?
首先,字符应该用撇号括起来,否则编译器会将您传递的数字直接作为ASCII值。
其次,C中的数组如下所示:char str[] = {'1', '2', '3', '4', '5'};不表示逗号分隔的字符串,这些逗号分隔数组成员,每个成员都在自己的索引中,而不是作为一个完整的字符串。
https://stackoverflow.com/questions/15283473
复制相似问题