Ciao a tutti, tra qualche tempo ho l'esame di fondamenti di informatica, e volevo sapere come posso fare in modo che se l'utente prema ad esempio 'a' al posto di inserire un numero intero, il programma non vada in loop in un ciclo for.
Perché come ben sapete con un programma del genere:
Oppure uno del genere:
Se si immette una lettera al posto di un numero intero, nel primo caso, il programma ritorna un valore 0, mentre nel secondo caso il valore in esadecimale del carattere.
Io allora avevo pensato di risolvere così nel primo caso:
E così nel secondo caso:
In poche parole, inserire un ciclo do while ed acquisire prima il valore con un vettore char, poi da quest'ultimo convertire la stringa in un numero intero, e porre la condizione.
Mentre se lo inserisco in un programma del genere (per esempio creare una matrice), il programma mi va in loop:
Perciò vi chiedo: come posso risolvere?
I miei compagni di corso non si pongono proprio il problema, inseriscono direttamente che la matrice è composta da interi, ma a me sembra assurdo che non venga fatta una verifica delle variabili inserite.
Spiegate in maniera semplice perché sono agli inizi della programmazione ed ho abbastanza difficoltà.
Grazie in anticipo
Perché come ben sapete con un programma del genere:
C++:
/*
Mostrare il valore inserito
*/
#include <iostream>
using namespace std;
int main () {
int a;
cout<<"\nInserire un valore intero.\n\n";
cin>>a;
cout<<"\n\nIl valore inserito \x8A: "<<a;
cout<<"\n\n\n";
system("pause");
}
Oppure uno del genere:
C++:
/*
Mostrare il valore inserito
*/
#include <iostream>
using namespace std;
int main () {
int a [5];
cout<<"\nInserire un valore intero.\n\n";
cin>>a[5];
cout<<"\n\nIl valore inserito \x8A: "<<a;
cout<<"\n\n\n";
system("pause");
}
Se si immette una lettera al posto di un numero intero, nel primo caso, il programma ritorna un valore 0, mentre nel secondo caso il valore in esadecimale del carattere.
Io allora avevo pensato di risolvere così nel primo caso:
C++:
/*
Mostrare il valore inserito
*/
#include <iostream>
#include <math.h>
#include <ctype.h>
#include <string.h>
#include <cstdio>
#include <stdlib.h>
using namespace std;
int main () {
char a [20];
int b;
do{
cout<<"\nInserire un valore intero.\n\n";
cin.getline(a,20);
b=atoi(a); //estraggo un valore intero dalla stringa
if ((b==0)&&(a[20]!='0')) {
cout<<"\n\nInserire un valore valido.\n\n";
cout<<"\n\n------------------------------------------------------\n\n";
}else{
cout<<"\n\nIl valore da lei inserito \x8A: "<<b;
}
}while((b==0)&&(a[20]!='0'));
cout<<"\n\n\n";
system("pause");
}
E così nel secondo caso:
C++:
/*
Mostrare il valore inserito
*/
#include <iostream>
#include <math.h>
#include <ctype.h>
#include <string.h>
#include <cstdio>
#include <stdlib.h>
using namespace std;
int main () {
char a [20];
int b[20];
do{
cout<<"\nInserire un valore intero.\n\n";
cin.getline(a,20);
b[20]=atoi(a); //estraggo un valore intero dalla stringa
if ((b[20]==0)&&(a[20]!='0')) {
cout<<"\n\nInserire un valore valido.\n\n";
cout<<"\n\n------------------------------------------------------\n\n";
}else{
cout<<"\n\nIl valore da lei inserito \x8A: "<<b[20];
}
}while((b[20]==0)&&(a[20]!='0'));
cout<<"\n\n\n";
system("pause");
}
In poche parole, inserire un ciclo do while ed acquisire prima il valore con un vettore char, poi da quest'ultimo convertire la stringa in un numero intero, e porre la condizione.
Mentre se lo inserisco in un programma del genere (per esempio creare una matrice), il programma mi va in loop:
C++:
/*
Data una matrice di dimensione uguale a 4 righe
per 4 colonne contenente elementi reali, scrivere
un programma in linguaggio C che mostri la matrice inserita
*/
#include <iostream>
#include <math.h>
#include <ctype.h>
#include <string.h>
#include <cstdio>
#include <stdlib.h>
#define righe 4
#define colonne 4
using namespace std;
int main () {
int mat [righe+1] [colonne+1];
char vett [20];
int v;
int i;
int j;
for (i=1;i<=colonne;i++) {
for (j=1;j<=righe;j++) {
do {
cout<<"\nInserire il valore: "<<i<<","<<j<<"\n";
cin.getline(vett,i);
v=atoi(vett);
if ((v==0)&&(vett[i]!='0')) {
cout<<"\n\nInserire un valore valido.\n\n";
cout<<"\n\n------------------------------------------------\n\n";
}else{
mat [i][j]=v;
}
}while((v==0)&&(vett[i]!='0'));
}
}
cout<<"\n\nLa matrice da lei inserita \x8A: \n\n";
for (i=1;i<=colonne;i++) {
cout<<"\n";
for (j=1;j<=righe;j++) {
cout<<" "<<mat [i] [j];
}
}
cout<<"\n\n\n";
system("pause");
}
Perciò vi chiedo: come posso risolvere?
I miei compagni di corso non si pongono proprio il problema, inseriscono direttamente che la matrice è composta da interi, ma a me sembra assurdo che non venga fatta una verifica delle variabili inserite.
Spiegate in maniera semplice perché sono agli inizi della programmazione ed ho abbastanza difficoltà.
Grazie in anticipo