我是C的新手。我编写了一些代码来尝试用逗号分隔stdin字符串,但我不知道如何最好地做到这一点。
基本上,我有一些数据将由用户以下列格式输入:
UserID (char []), 00:00:00 (时间,(char []), MeasurementID (char [ ]), readingValue (double)
我需要将这些值分开,以便我可以将它们分配给变量。我写了一些代码,我已经尝试来执行此操作,但是,我知道它不太正确。
char buffer [1024];
char input[];
scanf("%s", input);
int temp = 0;
int timekeeper = 0;
char userID[];
char timestamp[];
char measurementID[];
double value;
for(temp = 0; temp < sizeof(input); temp++){
char val[1024];
while(input[temp] != ','){
val += input[temp];
}
if(timekeeper == 0){
userID = val;
}
else if(timekeeper == 1){
timestamp = val;
}
else if(timekeeper == 2){
measurementID = val;
}
else if(timekeeper == 3){
value = (double)val;
}
timekeeper++;
}
如果有任何帮助,这些是我得到的错误。
exp.c:87:7:错误:无效操作数到二进制+(有'char [1024]'和 'int')
exp.c:90:6:错误:分配给类型时不兼容的类型 来自'char *'
类型的'char [1024]'exp.c:93:13:错误:不兼容的类型 从类型'char *'
分配类型'char [1024]'时exp.c:96:8: 错误:分配到'char [1024]'类型时不兼容的类型 输入'char *'
exp.c:99:3:错误:浮点数所用的指针值 点值是预期的
答案 0 :(得分:2)
似乎你误解了字符串在C语言中是如何工作的。
做类似
的事情val += input[temp];
无效的C代码。您不会将字符添加到C字符串中。存在用于操纵字符串的特殊功能,例如, strncat
,strncpy
等。
还有像
这样的定义char userID[];
无效,因为没有数组大小。
请注意
sizeof(input);
会给你变量的大小,但你可能想要字符串的长度,即改用strlen(input)
。
此外,您无法通过
将字符串转换为双精度数value = (double)val;
而是查找atof
函数。
这部分
while(input[temp] != ','){
val += input[temp];
}
会给你一个无限循环,temp
(因而input[temp]
)不会改变。
我建议您查看此答案Split string with delimiters in C,了解如何将字符串拆分为多个字符串。
答案 1 :(得分:0)
你不能连接char *和char [](“|”)或使用+的任何排列。请改用strncat()或snprintf(),并确保目标缓冲区有足够的内存来存储最终的字符串。