string imprimindo caracteres especiais [RESOLVIDO]

1. string imprimindo caracteres especiais [RESOLVIDO]

GABRIEL HUGO LIEBAN
gahulister

(usa Linux Mint)

Enviado em 21/04/2020 - 12:24h

Ola, estou com problema em um código e não sei qual o erro...se alguém puder me sinalizar meu erro. Na impressão "melhorAluno, a impressão sai errada.
Na atribuição nomeAluno para melhorAluno, se coloco = não compila, e se coloco == compila, mas dá erro nos caracteres.Agradeço desde já!
int main(int argc, char *argv[]) {
printf ("Informar quantidade de alunos da sala e mostrar a melhor nota \n");

int contador,quantidadeAlunos;
float notaAluno,maiorNota;
char nomeAluno[50];
char melhorAluno[50];

printf ("Quantos alunos tem a turma? ");
scanf ("%d",&quantidadeAlunos);
contador = 1;
while (contador <= quantidadeAlunos) {
printf ("Nome do %d.o ALUNO: ",contador);
scanf ("%s", nomeAluno);
printf ("Informe a nota final do %s: ",nomeAluno);
scanf ("%f", &notaAluno);
if (notaAluno > maiorNota ) {
maiorNota = notaAluno;
melhorAluno = nomeAluno;
}
contador++;
}
printf ("O Aluno %s tem a maior media de %.2f ",melhorAluno,maiorNota);
return 0;
}





  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 21/04/2020 - 19:51h

gahulister escreveu:

Ola, estou com problema em um código e não sei qual o erro...se alguém puder me sinalizar meu erro. Na impressão "melhorAluno, a impressão sai errada.
Na atribuição nomeAluno para melhorAluno, se coloco = não compila, e se coloco == compila, mas dá erro nos caracteres.Agradeço desde já!

int main(int argc, char *argv[]) {
printf ("Informar quantidade de alunos da sala e mostrar a melhor nota \n");

int contador,quantidadeAlunos;
float notaAluno,maiorNota;
char nomeAluno[50];
char melhorAluno[50];

printf ("Quantos alunos tem a turma? ");
scanf ("%d",&quantidadeAlunos);
contador = 1;
while (contador <= quantidadeAlunos) {
printf ("Nome do %d.o ALUNO: ",contador);
scanf ("%s", nomeAluno);
printf ("Informe a nota final do %s: ",nomeAluno);
scanf ("%f", &notaAluno);
if (notaAluno > maiorNota ) {
maiorNota = notaAluno;
melhorAluno = nomeAluno;


melhorAluno foi declarado como um array de caracteres. Em C, quando você declara um array, o compilador providencia espaço na memória que seja suficiente para armazenar aqueles elementos. Dali para frente, em praticamente todas as operações†, o nome do array fica associado ao valor do endereço inicial da região de memória que foi alocada, comportando-se como se fosse um ponteiro constante para o primeiro elemento do array. Sendo um valor constante, você não pode aplicar o operador de atribuição (=) para tentar trocar tal valor.

A forma de mudar o conteúdo de um array é alterando, um a um, os elementos que o compõem.

No caso de arrays que representam strings, existem funções da biblioteca padrão do C que fazem operações de cópia de conteúdo de um array para outro, tal como strncpy().

	               }
contador++;
}
printf ("O Aluno %s tem a maior media de %.2f ",melhorAluno,maiorNota);
return 0;
}



----
† As exceções são quando o nome do array aparece como operando dos operadores sizeof, que informa o tamanho em bytes do array inteiro, e &, que obtém um ponteiro para o array inteiro (isto é: se &array produz um determinado endereço na memória, (&array)+1 produzirá o endereço de memória que virá depois do último elemento de array).


... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)

3. Re: string imprimindo caracteres especiais [RESOLVIDO]

Adriano Siqueira
adrisiq

(usa KDE Neon)

Enviado em 21/04/2020 - 21:38h

Usa strcpy para atribuir um valor à string
strcpy(destino, valor); 

Para poder usar essa função, é necessário incluir a biblioteca string.h.


4. Re: string imprimindo caracteres especiais [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 22/04/2020 - 06:15h

adrisiq escreveu:

Usa strcpy para atribuir um valor à string
strcpy(destino, valor); 

Para poder usar essa função, é necessário incluir a biblioteca string.h.


Prezado adrisiq,

Cuidado com a terminologia. string.h não é uma biblioteca, mas sim um cabeçalho (em Inglês, header, de onde deriva o sufixo “.h”), que é um local onde existem declarações de funções e definições de constantes e tipos de dados que são usados pela biblioteca.

Se você souber a assinatura das funções que você usa no seu programa, pode colocá-las diretamente no código, em lugar de incluir os cabeçalhos que as contêm. Por exemplo, é perfeitamente válido o seguinte programa.
int printf(const char *fmt, ...);
int scanf(const char *fmt, ...);
char *strncpy(char *dst, const char *src, size_t length);

int main(void){
/* Código que usa apenas as três funções declaradas acima. */
}



... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts