在c中使用struct时无法获得价值[关闭]
Posted
技术标签:
【中文标题】在c中使用struct时无法获得价值[关闭]【英文标题】:Cannot get value when working with struct in c [closed] 【发布时间】:2022-01-16 05:05:05 【问题描述】:我正在编写一个程序,提示用户输入城市信息(在我用 2 个城市测试的程序中:city a, b
)然后打印出这些值。每个城市有 4 个值:name
、income
、population
和 literarte_rate
。问题是当我输入信息literrate_rate
时,它会自动打印出0.000000
并将其保存到变量中。我仍然可以为其输入值和下一个信息。
输入
city name: qwerty 123 !@#
income: 789
population: 123456
literation: 0.000000685
city name: asdfgh 456 $%^
income: 456
population: 999999
literation: 0.00000065684
输出
city name: qwerty 123 !@#
income: 789
population: 123456
literation: 0.00
city name: asdfgh 456 $%^
income: 456
population: 999999
literation: 0.00
这是我的代码
#include <stdio.h>
#include <string.h>
typedef struct City
char name[51];
double income;
unsigned int population;
double literate_rate;
city;
void input(city *tmp);
void output(city tmp);
int main()
city a, b;
input(&a);
input(&b);
output(a);
output(b);
return 0;
void input(city *tmp)
printf("city name: ");
fgets(tmp->name, 50, stdin);
tmp->name[strlen(tmp->name)-1]='\0';
printf("income: ");
scanf("%lf", &tmp->income);
while(getchar()!='\n');
printf("population: ");
scanf("%d", &tmp->population);
while(getchar()!='\n');
printf("literation: ");
printf("%lf", &tmp->literate_rate);
while(getchar()!='\n');
void output(city tmp)
printf("\ncity name: %s", tmp.name);
printf("\nincome: %.2f", tmp.income);
printf("\npopulation: %d", tmp.population);
printf("\nliteration: %.2f", tmp.literate_rate);
我尝试在每个带有数字的scanf
之后使用while(getchar()!='\n');
,但这并不能解决问题。
那么如何解决它并提高效率?
提前致谢。
【问题讨论】:
在输入函数中,你不是在扫描literate_rate的值,而是在打印它的地址。 您使用printf
阅读literation
。你的编译器不会给你关于这一行的警告吗,因为我认为在所有现代 C 编译器中,当格式字符串作为文字字符串存在时检查 printf 参数的类型是标准的。
在编译过程中类似:gcc -Wall filename.c -o outputfilename
我不知道您使用的完整命令是什么,但要查看警告请使用 -Wall
选项。
看起来 ubuntu 默认启用格式检查,但在标准 gcc 中未启用。 gcc -Wformat
启用此功能,但正如其他人所建议的那样,建议使用gcc -Wall
启用此警告和其他功能。
【参考方案1】:
你错过了scanf的电话:
printf("%lf", &tmp->literate_rate);
应该是
scanf("%lf", &tmp->literate_rate);
另外,您应该检查 scanf 的结果(返回扫描令牌的数量)以确保扫描成功。
【讨论】:
非常感谢您的建议,非常感谢。以上是关于在c中使用struct时无法获得价值[关闭]的主要内容,如果未能解决你的问题,请参考以下文章