Grazie vins3xtreme, ecco uno dei codici di esercizio nei quali il gets mi ha dato quel problema:
#include <stdio.h>
#include <string.h>
int main (void)
{
char nome[100][20];
int voto[100][6];
char n[20];
int z,i,s;
printf("Olimpiadi\n");
printf("Vota l'atleta e determino il più bravo\n");
printf("Quanti atleti ci sono? ");
scanf("%d",&z);
gets(n);
for (i=0;i<z;i++){
printf("\nCome si chiama il %d° atleta?",i+1);
gets(n);
strcpy(nome[i],n);
}
for (i=0;i<z;i++){
voto[i][5]=0;
for (s=0;s<5;s++){
printf("Giudice %d, voto atleta %s :",s+1,nome[i]);
scanf("%d",&voto[i][s]);
voto[i][5]=voto[i][5]+voto[i][s];
}
}
for (i=0;i<z;i++){
printf("\nAtleta %s, totale voti: %d ", nome[i],voto[i][5]);
}
}
qui come vedi il primo gets l'ho messo prima del ciclo for dato che per risolvere il problema era sufficiente inserirlo ripetuto una sola volta.
ma la cosa strana è che, dopo i primi esercizi (sono alle prime armi e sto studiando ed esercitandomi passo dopo passo...) effettuati con il gets nel quale funzionava perfettamente, di punto in bianco mi ha dato questo problema. Ed i primi esercizi sono del tutto simili come difficoltà ed impostazione... ti posto ad esempio un codice dove non mi da problemi (o meglio, mi scrive il solito avviso warning.... ma cmq attende l'inserimento della stringa), in questo codice inserisco 2 stringhe e il programma cerca la seconda all'interno della prima, se la trova sostituisce i caratteri uguali con '*':
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (void)
{
char primo[30];
char secondo[30];
char nuova[30];
long lunghezza;
int i,a,flag;
a=0;
flag=0;
printf("RICERCA SOTTOSTRINGA\n");
printf("\ninserisci la prima parola: \n");
gets(primo);
printf("\ninserisci la seconda parola: \n");
gets(secondo);
lunghezza=strlen(primo);
for (i=0;i<lunghezza;i++){
nuova[i]=primo[i];
}
printf("\nprima la parola nuova è %s",nuova);
if (strlen(secondo)>lunghezza){
printf("la seconda parola deve essere più corta della prima");
printf("\ninserisci la seconda parola: \n");
gets(secondo);
}
i=0;
while (i<lunghezza){
for (a=0;a<strlen(secondo);a++){
if (secondo[a]==primo[i]){
i++;
flag++;
while (a<strlen(secondo)){
a++;
if (secondo[a]==primo[i] && i<lunghezza){
nuova[i]='*';
nuova[i-1]='*';
i++;
flag++;
}
else if (secondo[a]==primo[i] && i==lunghezza){
nuova[i-1]='*';
i++;
flag++;
}
}
}
else if (secondo[a]!=primo[i]){
i++;
a--;
}
}
}
printf("\nLa parola vecchia è %s",primo);
printf("\nLa parola nuova è %s",nuova);
}
mistero della fede