Ir ao conteúdo
  • Cadastre-se
Lucas Ribas

Loop termina antes da hora porque li (dentro do loop) uma string com espaço

Recommended Posts

O algoritmo é para ler o nome, o codigo e as notas de n alunos e gravar num txt, quando digito um nome normal por exemplo: julia, funciona 100%,mas quando digito(julia silva)

o loop sai e o programa termina. Se alguem souber o motivo por favor me diga.

 

#include <stdio.h>
#include <string.h>

int main() {
    FILE *text;
    char nome[30], aluno[30];
    float n1, n2, n3;
    int n, i, j, cod;
    
    printf("Informe um nome para seu arquivo texto. Ex: nome.txt\n");
    
    scanf("%s", nome);
    text = fopen(nome, "w");
    printf("Digite o numero de alunos:\n");
    scanf("%d", &n);
    
    for (i=0; i<n; i++){
        printf("Digite o nome do aluno\n");
        scanf("%s", aluno);
        printf("Digite o codigo do aluno:\n");
        scanf("%d", &cod);
        printf("Digite as 3 notas do aluno:\n");
        scanf("%f %f %f", &n1, &n2, &n3);
    
        fprintf(text, "%.1f %.1f %.1f cod:%d %s\n ", n1, n2, n3, cod, aluno);
        fprintf(text, "\n");
    }
    fclose(text);
    return 0;
    
    
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

O scanf com o %s pega uma string até que o usuário digite enter ou espaço, ou seja, o espaço no meio do nome finaliza a captura da string, mas não sei explicar o motivo pelo qual o loop é finalizado, tente usar esse trecho para receber o nome:

Citação

scanf("%*c%[^\n]", aluno);

esse %*c é para eliminar o lixo do buffer do teclado e o [^\n] é para que seja capturado tudo que o usuário digitar até o \n (enter).

 

Ou use simplesmente um gets:

Citação

fflush(stdin);

gets(aluno);

O Gets pega tudo que o usuário digitar até o enter, e o fflush é para limpar o buffer do teclado.

Editado por MassakiMsk
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×