I’m not able to read strings with space and store them

Asked

Viewed 29 times

-1

#include <stdlib.h>

struct dado_cidade {
    char cidade[20];
    float taxa_2009;
    float taxa_2015;
    float indice_percent;
} cidades[27];

int main () {

    FILE *dados;
    dados = fopen("dados_tabela.txt", "r");

    int i;

    for (i = 0; i < 27; i++) {
        fscanf(dados, "%s %f %f %f", &cidades[i].cidade, &cidades[i].taxa_2009, &cidades[i].taxa_2015); 
        cidades[i].indice_percent = cidades[i].taxa_2015 - cidades[i].taxa_2009;
    }

    fclose(dados);

    // for (i=0; i<27; i++) {
    //     printf("%s %f %f %f\n", cidades[i].cidade, cidades[i].taxa_2009, cidades[i].taxa_2015, cidades[i].indice_percent);
    // }

    printf("%s", cidades[2].cidade);
    
    
    return 0;
}

"Rondonia" 97.8 57.7
"Acre"41.4 58.9
"Amazonas" 109.9 78.8
"Roraima" 125 96.4
"To"73.2 72.9
"Amapa" 37.6 110.8
"Tocantins" 97 85.6
"Maranhao"109.7 116.5
"Piaui" 100.1 103.6
"Ceara" 66.2 49.1
"Rio Grande do Norte"
"Paraiba" 64.9 81.8
"Pernambuco" 62.1 67.6
"Alagoas" 34.3 59.1
"Sergipe" 118.6 51.6
"Bahia" 101.8 75.4
"Minas Gerais" 52.1 47
"Holy Spirit" 91.3 73.1
"Rio de Janeiro" 93.7 67.1
"Sao Paulo" 56.6 50.8
"Parana" 71.7 51.7
"Saint Catherine" 32.2 30.9
"Rio Grande do Sul" 67.3 43.4
"Mato Grosso do Sul" 126.7 88.2
"Mato Grosso" 85.9 82.9
"Goias" 50.7 56.6
"Federal District" 67.3 43.7

By having this data read that is in the file the spaces in the strings are interpreted as a single input per space.

1 answer

0

By default the function fscanf will read until you find a space " ".

You need to specify that your string is in quotes in Pattern:

fscanf(dados, "\"%[^\"]\" %f %f %f", &cidades[i].cidade, &cidades[i].taxa_2009, &cidades[i].taxa_2015);

Browser other questions tagged

You are not signed in. Login or sign up in order to post.