Ir ao conteúdo

Posts recomendados

Postado

Olá, sou um completo iniciante em C. Preciso criar um código que classifique as notas de 1 a 100 de 1-5 e A-F, com o programa que faz a conversão em um ficheiro separado.   O programa funcionava bem para uma variável, mas ao alterar a variável para uma matriz começou a dar o erro
 "undefined reference to `WinMain' 

[Error] ld returned 1 exit status"

#include <stdio.h>

  int main(){
int i, j;
int a[i];
int s, gru;

	printf("Intruduce the number os students ", &s);
	fflush(stdout);
	scanf("%d", &s);
	printf("Intruduce their grades\n");
	fflush(stdout);

	
	for (i = 0; i<s; i++) { 
		printf("a[%d] = ", i); 
		fflush(stdout);
		scanf("%d", &a[i]);}
	 
	 for (i=0; i<s; i++){ 
	 
		if (a[i]<51){	
			gru=2;}
			
		if (a[i]>50 && a[i]<69);{
			gru=3;}
			
		if (a[i]>69 && a[i]<=85){
				gru=4;}
       
		if (a[i]>85 && a[i]<=100){
				gru=5;}
							
	printf("Grade: %d  %d \n", a[i], gru);
	fflush(stdout);
	}
	
return 0;
} 

 

Alterei o programa e consegui fazer funcionar para as notas 1-5, (embora continue a dar erro esse erro) mas não para A-F. 

 

Código funcional, mas com erro:

#include <stdio.h>
#include "dz5 2.c"

int main(){
    int i, a[100], s;

    printf("Introduce the number of students ");
    fflush(stdout);
    scanf("%d", &s);
    if (s > 100)
        s = 100;
    printf("Introduce their grades\n");
    fflush(stdout);

    for (i = 0; i<s; i++) { 
        printf("a[%d] = ", i); 
        fflush(stdout);
        scanf("%d", &a[i]);

        printf("Grade %d:  %d, %s \n  ", a[i], gradru(a[i]);
        fflush(stdout);
    }

    return 0;                       
}

 

int gradru(int v){
if (v > 85) return 5;
else if (v > 68) return 4;
else if (v > 50) return 3;
else if (v >= 0) return 2;

return 0;
}

 

 

Programa completo:

#include <stdio.h>
#include "dz5 2.c"

int main(){
    int i, a[100], s;

    printf("Introduce the number of students ");
    fflush(stdout);
    scanf("%d", &s);
    if (s > 100)
        s = 100;
    printf("Introduce their grades\n");
    fflush(stdout);

    for (i = 0; i<s; i++) { 
        printf("a[%d] = ", i); 
        fflush(stdout);
        scanf("%d", &a[i]);

        printf("Grade %d:  %d, %s \n  ", a[i], gradru(a[i]), gradus(a[i]));
        fflush(stdout);
    }

    return 0;                       
}
int gradru(int v){
if (v > 85) return 5;
else if (v > 68) return 4;
else if (v > 50) return 3;
else if (v >= 0) return 2;
return '-';
}

char gradus(int v){
if (v > 94) return 'A';
else if (v > 85) return 'B';
else if (v> 68) return 'C';
else if (v > 60) return 'D';
else if (v > 50) return 'E';
else if (v >= 0) return 'F';

return 0;
}

 

Postado

Seu programa não está bom :(

int gradru(int v){
if (v > 85) return 5;
else if (v > 68) return 4;
else if (v > 50) return 3;
else if (v >= 0) return 2;
return '-';
}

Não precisa de else depois de return.

Uma função que retorna int não deve retornar '-' em geral. O valor de '-' é 45... Só vai dar confusão.

char gradus(int v){
if (v > 94) return 'A';
else if (v > 85) return 'B';
else if (v> 68) return 'C';
else if (v > 60) return 'D';
else if (v > 50) return 'E';
else if (v >= 0) return 'F';

return 0;
}

Em gradus() porque retorna zero para notas negativas? 'F'  já não estaria bom? Se faz diferença desse lado então deveria ter testado também para notas maiores que 100...

 for (i = 0; i<s; i++) { 
        printf("a[%d] = ", i); 
        fflush(stdout);
        scanf("%d", &a[i]);

        printf("Grade %d:  %d, %s \n  ", a[i], gradru(a[i]), gradus(a[i]));
        fflush(stdout);
    }

Provavelmente

  • você queria a } do for depois do scanf() para ter um loop de leitura
  • E um outro for para mostrar a grade de notas com os valores lidos e os calculados, o printf() final DEPOIS de ter lido tudo..

 

Sugiro rever a lógica

 

E esta usando toda hora esse fflush(stdout). Nem sempre precisa de fflush() mas se está preocupado com scanf() deveria usar flush no stream correto, stdin e não stdout porque o printf() já fez isso.

 

  • Obrigado 1
Postado

@EM0, assumindo que o código depois de "Programa completo" no post original é o que importa agora, aqui ele compila (usando gcc) e funciona normalmente com exceção de uma falha, infelizmente, grave: na linha

 

printf("Grade %d:  %d, %s \n  ", a[i], gradru(a[i]), gradus(a[i]));

 

você usa o formato %s pra escrever uma string, char[ ] ou char*, mas gradus( ) retorna um caráter apenas, char. O formato correto então seria %c.

 

O código como compilei aqui:

 

#include <stdio.h>

int gradru(int v){
if (v > 85) return 5;
else if (v > 68) return 4;
else if (v > 50) return 3;
else if (v >= 0) return 2;

return 0;
}

char gradus(int v){
if (v > 94) return 'A';
else if (v > 85) return 'B';
else if (v> 68) return 'C';
else if (v > 60) return 'D';
else if (v > 50) return 'E';
else if (v >= 0) return 'F';

return 0;
}

int main(){
    int i, a[100], s;

    printf("Introduce the number of students ");
    fflush(stdout);
    scanf("%d", &s);
    if (s > 100)
        s = 100;
    printf("Introduce their grades\n");
    fflush(stdout);

    for (i = 0; i<s; i++) {
        printf("a[%d] = ", i);
        fflush(stdout);
        scanf("%d", &a[i]);

        printf("Grade %d:  %d, %c \n  ", a[i], gradru(a[i]), gradus(a[i]));
        fflush(stdout);
    }

    return 0;
}

 

  • Obrigado 1
Postado

@V!OLADOR O interessante é que na tarefa dizia especificamente para usar %s, me pergunto se foi um erro ou uma pegadinha do professor. 

Postado
7 horas atrás, EM0 disse:

@V!OLADOR O interessante é que na tarefa dizia especificamente para usar %s, me pergunto se foi um erro ou uma pegadinha do professor. 


Bom, se você é o autor de gradus ( ), pode modifica-la pra retornar uma string ao invés de um char e ficar conforme com o exercício. Apenas tenha certeza que, primeiro, sabe retornar uma string e, segundo, usar aspas dublas pra atribuir constantes a strings ("A", "B" etc).

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!