在 c 中使用 struct 时无法获取值
Cannot get value when working with struct in c
我正在编写一个程序,提示用户输入城市信息(在我用 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]='[=12=]';
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');
,但没有解决问题。
那么如何解决并提高效率呢?
提前致谢。
您错过了对 scanf 的呼叫:
printf("%lf", &tmp->literate_rate);
应该是
scanf("%lf", &tmp->literate_rate);
此外,您应该检查 scanf 的结果(returns 扫描的令牌数)以确保扫描成功。
我正在编写一个程序,提示用户输入城市信息(在我用 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]='[=12=]';
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');
,但没有解决问题。
那么如何解决并提高效率呢?
提前致谢。
您错过了对 scanf 的呼叫:
printf("%lf", &tmp->literate_rate);
应该是
scanf("%lf", &tmp->literate_rate);
此外,您应该检查 scanf 的结果(returns 扫描的令牌数)以确保扫描成功。