分割单个输入并存储在单个变量中

时间:2018-07-27 09:23:25

标签: c split

我正在尝试拆分单个输入并存储在单独的变量中。

以下是我的代码:

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

2 个答案:

答案 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);