PDA

Visualizza la versione completa : [C] Visualizzazione di stringhe


cristianc
17-08-2009, 23:03
Ciao, sto completando lo sviluppo di un programma, che un registro dei voti degli studenti.
Sono all'ultima parte, cio la visualizzazione dei risultati. ho provato a scrivere i nomi degli studenti in una tabella, ma ricevo degli errori in compilazione:


voti.c: In function main:
voti.c:63: warning: format %s expects type char *, but argument 2 has type int


questo il codice del programma (provvisorio):

#include <stdio.h>

#define MAXDIM 20


main()
{
char c, nomi[MAXDIM][50],cognomi[MAXDIM][50];
int n, voti[MAXDIM][8];
printf("\n\t\t* REGISTRO DEI VOTI DEGLI STUDENTI *\n\n");
do {
printf("\t\t1. Crea database studenti\n\t\t2. Registra voti studenti\n\t\t3. Visualizza risultati\n\t\t4. Esci\n");
printf("\t\t\t\t\t\t\tScelta:");
while((c = getc(stdin)) != EOF && c != '\n' && c != '1' && c != '2' && c != '3' && c !='4');
printf("\n");
if (c=='1') {
int i;
printf("// Creazione database studenti\n\n");
do {
float num;
printf("numero di studenti(massimo 20): ");
scanf("%f",&num);
n = (int)num;
} while(n<2 || n>MAXDIM);
for(i=0;i<n;i++) {
printf("\nSTUDENTE No.%d\n",i+1);
printf("Nome: ");
scanf("%s",nomi[i]);
printf("Cognome: ");
scanf("%s",cognomi[i]);
}
printf("\n\n");
while(!getchar());
}
if (c=='2') {
int i,j;
printf("// Registrazione voti studenti\n\n");
printf("[inserire solo numeri interi compresi tra 0 e 10]\n\n");
for(i=0;i<n;i++) {
for(j=0;nomi[i][j]!='\0' || cognomi[i][j]!='\0';j++) {
if (nomi[i][j]<123 && nomi[i][j]>96)
nomi[i][j] -= 32;
if (cognomi[i][j]<123 && cognomi[i][j]>96)
cognomi[i][j] -= 32;
}
printf("%s %s\n",nomi[i],cognomi[i]);
for(j=0;j<8;j++) {
do {
float voto;
printf("prova #%d voto:",j+1);
scanf("%f",&voto);
voti[i][j] = (int)voto;
} while(voti[i][j]<0 || voti[i][j]>10);
}
printf("\n\n");
}
while(!getchar());
}
if (c=='3') {
int i;
printf("// Visualizzazione dei risultati\n\n");
for(i=0;i<n;i++)
printf("%s. %s\n",nomi[i][0],cognomi[i]);
while(!getchar());
}
} while (c!='4');
}

mi sembra strano l'errore che ricevo in compilazione trattandosi di stringhe :confused:

Samuele_70
18-08-2009, 09:26
Come ti segnala il compilatore l'errore alla riga 63

printf("%s. %s\n",nomi[i][0] ,cognomi[i]);

la printf si aspetta un puntatore, non un char.

PS
la funzione main deve restituire un int.

cristianc
18-08-2009, 10:11
Scrivendo %c per il primo argomento ho risolto il problema.

questo l'output attuale:


cristiancozzolino@cristian-laptop:~/programmazione$ ./voti

* REGISTRO DEI VOTI DEGLI STUDENTI *

1. Crea database studenti
2. Registra voti studenti
3. Visualizza risultati
4. Esci
Scelta:1

// Creazione database studenti

numero di studenti(massimo 20): 3

STUDENTE No.1
Nome: Mario
Cognome: Rossi

STUDENTE No.2
Nome: CARLO
Cognome: VERDI

STUDENTE No.3
Nome: maria
Cognome: Bianchi


1. Crea database studenti
2. Registra voti studenti
3. Visualizza risultati
4. Esci
Scelta:2

// Registrazione voti studenti

[inserire solo numeri interi compresi tra 0 e 10]

MARIO ROSSI
prova #1 voto:5
prova #2 voto:6.3
prova #3 voto:2
prova #4 voto:20
prova #4 voto:4
prova #5 voto:2445
prova #5 voto:3.5
prova #6 voto:6
prova #7 voto:7
prova #8 voto:-4
prova #8 voto:4


CARLO VERDI
prova #1 voto:4
prova #2 voto:7
prova #3 voto:4
prova #4 voto:3
prova #5 voto:1
prova #6 voto:567
prova #6 voto:8
prova #7 voto:7
prova #8 voto:5


MARIA BIANCHI
prova #1 voto:45
prova #1 voto:3
prova #2 voto:6
prova #3 voto:9
prova #4 voto:3
prova #5 voto:10
prova #6 voto:0
prova #7 voto:5
prova #8 voto:3


1. Crea database studenti
2. Registra voti studenti
3. Visualizza risultati
4. Esci
Scelta:3

// Visualizzazione dei risultati

M. ROSSI
C. VERDI
M. BIANCHI
1. Crea database studenti
2. Registra voti studenti
3. Visualizza risultati
4. Esci
Scelta:


Adesso lo schema che vorrei creare questo:


#1 #2 #3 #4 #5 #6 #7 #8 Media studente
Nome1
Nome2
Nome3
Nome4
....
Media prove Media globale


il problema che non so come far partire i voti da #1 :confused: :dh:

cristianc
30-08-2009, 11:41
Questa la nuova versione del programma, comunque la devo finire:

#include <stdio.h>

#define MAXDIM 20


main()
{
char c, nomi[MAXDIM][50],cognomi[MAXDIM][50];
int n, voti[MAXDIM][8];
printf("\n\t\t* REGISTRO DEI VOTI DEGLI STUDENTI *\n\n");
do {
printf("\t\t1. Crea database studenti\n\t\t2. Registra voti studenti\n\t\t3. Visualizza risultati\n\t\t4. Esci\n");
printf("\t\t\t\t\t\t\tScelta:");
while((c = getc(stdin)) != EOF && c != '\n' && c != '1' && c != '2' && c != '3' && c !='4');
printf("\n");
if (c=='1') {
int i;
printf("// Creazione database studenti\n\n");
do {
float num;
printf("numero di studenti(massimo 20): ");
scanf("%f",&num);
n = (int)num;
} while(n<2 || n>MAXDIM);
for(i=0;i<n;i++) {
printf("\nSTUDENTE No.%d\n",i+1);
printf("Nome: ");
scanf("%s",nomi[i]);
printf("Cognome: ");
scanf("%s",cognomi[i]);
}
printf("\n\n");
while(!getchar());
}
if (c=='2') {
int i,j;
printf("// Registrazione voti studenti\n\n");
printf("[inserire solo numeri interi compresi tra 0 e 10]\n\n");
for(i=0;i<n;i++) {
for(j=0;nomi[i][j]!='\0' || cognomi[i][j]!='\0';j++) {
if (nomi[i][j]<123 && nomi[i][j]>96)
nomi[i][j] -= 32;
if (cognomi[i][j]<123 && cognomi[i][j]>96)
cognomi[i][j] -= 32;
}
printf("%s %s\n",nomi[i],cognomi[i]);
for(j=0;j<8;j++) {
do {
float voto;
printf("prova #%d voto:",j+1);
scanf("%f",&voto);
voti[i][j] = (int)voto;
} while(voti[i][j]<0 || voti[i][j]>10);
}
printf("\n\n");
}
while(!getchar());
}
if (c=='3') {
int i;
printf("// Visualizzazione dei risultati\n\n");
printf("\t\t ");
for(i=0;i<8;i++)
printf(" #%d",i+1);
printf(" MEDIA\n");
for(i=0;i<n;i++)
printf("%c.%-18s\n",nomi[i][0],cognomi[i]);
printf("\n\n");
while(!getchar());
}
} while (c!='4');
}

E questo un semplice output:


* REGISTRO DEI VOTI DEGLI STUDENTI *

1. Crea database studenti
2. Registra voti studenti
3. Visualizza risultati
4. Esci
Scelta:1

// Creazione database studenti

numero di studenti(massimo 20): 5

STUDENTE No.1
Nome: Marco
Cognome: Terzi

STUDENTE No.2
Nome: Franco
Cognome: Battaglia

STUDENTE No.3
Nome: Gieseppe
Cognome: Brambilla

STUDENTE No.4
Nome: Sonia
Cognome: Cianfanelli

STUDENTE No.5
Nome: Ugo
Cognome: Incostante


1. Crea database studenti
2. Registra voti studenti
3. Visualizza risultati
4. Esci
Scelta:3

// Visualizzazione dei risultati

#1 #2 #3 #4 #5 #6 #7 #8 MEDIA
M.Terzi
F.Battaglia
G.Brambilla
S.Cianfanelli
U.Incostante


1. Crea database studenti
2. Registra voti studenti
3. Visualizza risultati
4. Esci
Scelta:4

Loading