【发布时间】:2021-01-08 02:30:57
【问题描述】:
我在将多个变量传递给scanf 时遇到了一些麻烦:
#include<stdio.h>
int main(void) {
char *name;
float weight;
printf("Please enter your name, then weight separated by a comma: ");
scanf("%s,%f", name, &weight);
printf("%s, your weight is %.2f!\n", name, weight);
return 0;
}
请输入您的姓名,然后用逗号分隔体重:Tommy,184
汤米,184,你的体重是 0.00!
这样做的正确方法是什么,为什么scanf 不检测逗号并在其变量中提取必要的值?
【问题讨论】:
-
1.
name将存储在哪里? 2?如果到达 %f 位? 3. 为什么不检查scanf的返回值 -
char *name;在没有有效内存的情况下读入此内容将是 UB。 -
@IrAM 我明白了,感谢您提供这些链接。所以改为做类似
char name[10];...scanf("%9s", name)的事情? -
也许
scanf(%9[^,], %f"...)] -
%s作为格式说明符将读取所有内容直到下一个空格。包括名称、逗号和浮点数。
标签: c