我的问题陈述是接受一串数字并在屏幕上显示不同的数字。所以我尝试使用strtok()
将字符串分成不同的数字,atoi()
将这些数字转换为数字。但我收到了运行时错误..我还附上了一个示例代码。
输入
1 22 123 89 12 as a string
输出
1 22 123 89 12 as numbers
我需要对这些数字进行数学运算。所以我必须从整数转换为字符串。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main ()
{
int i,j;
char buffer [256];
char *token;
const char s[2]= " ";
fgets (buffer, 256, stdin);
token=strtok(buffer,s);
i = atoi (token);
printf("%d \n",i);
while (token!=NULL)
{token=strtok(buffer,s);
i = atoi (token);
printf("%d ",i);
}
return 0;
}
答案 0 :(得分:2)
除了将参数更改为循环中的strtok
来电之外,您还需要更改调用strtok
和atoi
的顺序。现在,如果循环中的strtok
返回NULL
,它迟早会做什么呢?
相反,例如。
token=strtok(buffer,s);
while (token!=NULL)
{
i = atoi (token);
printf("%d ",i);
token = strtok(NULL, " ");
}
答案 1 :(得分:1)
您需要在token
之前检查atoi()
是否为NULL。除此之外,strtol()
的使用优先于atoi()
。
那就是说,我认为,为了你的目的,
while (token!=NULL)
{token=strtok(buffer,s);
应该是
while (token!=NULL)
{token=strtok(NULL,s);
否则,您最终会一遍又一遍地解析输入。
接下来,要避免\n
读取fgets()
,请使用分隔符字符串
char * s = " \n";
答案 2 :(得分:0)