在 c 中使用 struct 时无法获取值

Cannot get value when working with struct in c

我正在编写一个程序,提示用户输入城市信息(在我用 2 个城市测试的程序中:city a, b)然后打印出这些值。每个城市有 4 个值:nameincomepopulationliterarte_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 扫描的令牌数)以确保扫描成功。