[C]Dubbio su un controllo

frab1
Ciao,
sto scrivendo un programma che legge da tastiera una sequenza di caratteri con la $getchar()$ e che memorizza tutto in un vettore. Fin qui tutto OK. Poi volevo implementare un controllo che, qualora si superi la dimensione del vettore allocato, termini la lettura con un messaggio di errore...
Non capisco come mai cio' che ho scritto non funziona...formalmente mi sembra corretto.. :roll:
#include <stdio.h>
#include <string.h>
#define MAX 10

int main(void)
{
	char stringa[MAX]="";
	printf("Inserire una sequenza di caratteri che saranno acquisiti con getchar():\n");
	char c;
	int i=0;
	while ((stringa[i]=getchar()) != '\n') {
		if(i<MAX) {
			i++;
		} else {
			printf("Errore! Si sta inserendo una stringa troppo lunga!!\n");
		}
	}
	printf("La parola inserita è:\n%s\n",stringa);
	return 0;
}

Risposte
apatriarca
Ci sono due errori. Il primo errore è che stai scrivendo dentro stringa prima di verificare se i è minore della dimensione massima della stringa. Il secondo errore è che il tuo codice per terminare l'esecuzione non la termina. Per correggere il tuo codice conviene usare una variabile di appoggio (come c che non hai usato) come segue:
#include <stdio.h>
#include <string.h>
#define MAX 10

int main(void)
{
   char stringa[MAX]="";
   printf("Inserire una sequenza di caratteri che saranno acquisiti con getchar():\n");
   char c = '\0';
   int i=0;
   while ((c = getchar()) != '\n') {
      if(i < MAX) {
         stringa[i++] = c;
      } else {
         printf("Errore! Si sta inserendo una stringa troppo lunga!!\n");
         return 1; // oppure break o qualsiasi altra cosa
      }
   }
   printf("La parola inserita è:\n%s\n",stringa);
   return 0;
}

vict85
@apratriarca: la condizione sarebbe i<(MAX-1) e andrebbe aggiunto c = '\0' dopo il while.

frab1
Questa parte ...
"apatriarca":
   while ((c = getchar()) != '\n') {
      if(i < MAX) {
         stringa[i++] = c;
      } else 


e' uguale a questa, confermate?
while ((c=getchar()) != '\n') {
		if(i<MAX) {
			stringa[i]=c;
			i++;
		} else 

apatriarca
Sì.. Confermo.

frab1
grazie!sempre gentili!
:-)

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.