我正在尝试拆分单个输入并存储在单独的变量中。
以下是我的代码:
int main() {
float mil;
char car[50];
scanf("%s@%f", car, &mil);
printf("%s %f", car, mil);
return 0;
}
输入:
polo@15.5
程序的输出:
polo@15.5 0.000000
如何在car
中存储string
的名称并在mileage
中存储float
的值,以便输出类似于:
polo 15.5
答案 0 :(得分:2)
问题在于,%s
会扫描所有内容,直到一个空格字符为止,直到一个'@'
字符为止。
您可以使用%[
格式说明符来获取所需的内容:
scanf("%[^@]@%f", car, &mil);
%[^@]
告诉scanf
扫描所有内容,直到@
。
旁注:您应该始终检查*scanf
的结果。它们返回成功扫描和分配的元素数。另外,您也可以使用长度修饰符(在您的情况下为%49[^@]
)来防止缓冲区溢出。
答案 1 :(得分:2)
您的输入是一个字符串,因此必须首先将其分开。您可以为此使用string.h库中的strtok_s()。
MacOS
现在“ polo”存储在汽车中,“ 15.5”存储在模型中,但它们都是字符串。要将模型转换为float,可以使用标准库(stdlib.h)中包含的atof()函数。
#include <string.h>
// ...
char * model = NULL;
strtok_s(car, '@', model);