【发布时间】:2020-11-22 17:49:03
【问题描述】:
我没有太多经验,我正在尝试从字符串中读取这些正数和负数十进制数作为双精度数并有效地存储它们,以便可以在更大的范围内对它们进行一一评估for 循环。如果数字给出正确(注释掉),我的评估是有效的,但我正在努力阅读和传递十进制数字。此代码不起作用并陷入循环,直到出现段错误。
由于输入之间有空格,最好以某种方式使用 strtok() 还是我尝试的方法合适?
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
char input[1024] = "3.2 -5.1 3.7";
char numchar[1024];
int i = 0, j = 0;
char *ptr1;
double val;
int main()
{
ptr1 = input;
for(i=0;i<strlen(input);i++)
{
if(isalnum(input[i]) || input[i] == '.')
{
while(input[i] != 32)
{
numchar[j++] = input[i];
val = strtod(numchar,&ptr1);
printf("Val = %lf\n", val);
printf("ptr = %s", ptr1);
}
//tempVal = val
//push(tempVal);
}
//EVALUATION OF CURRENT NUMBER HERE
}
}
【问题讨论】:
-
为什么不能使用
sscanf()? -
旁注: 执行
for(i=0;i<strlen(input);i++)会将工作量从 O(n) 增加到 O(n**2)。最好这样做:int len = strlen(input); for(i=0;i<len;i++)或者,更好的是,这样做:for(ptr1 = input; *ptr1 != 0; ++ptr1)并将所有input[i]替换为*ptr1另外,当你这样做strtod时,numchar有 not 0 终结者。