Mandare in crash questo programma [C++]

di il
9 risposte

Mandare in crash questo programma [C++]

Ciao, sono uno studente di secondo superiore e mi servirebbe aiuto per riuscire a mandare in crash questo programma una volta eseguito, così da sistemare tutti gli eventuali errori. Purtroppo o per fortuna non ne trovo alcuno, potreste gentilmente darmi una mano?

Vi lascio la traccia del programma in caso servisse:
Per il problema proposto realizzare, controllando opportunamente l'input, un algoritmo risolutivo:
Sia dato un elenco di N (N<=300) studenti provenienti dalla scuola media con matricola, sesso (M=maschio, F=femmina), reddito familiare e voto finale di licenza media (da 6 a 10). Calcolare e stampare:
? Il reddito medio degli studenti con voto superiore alla sufficienza;
? Il voto medio degli alunni;
? Il voto minimo ottenuto;
? Il nome dello studente con reddito familiare massimo;
? Il numero di studenti di sesso femminile;
? Il nome e il sesso degli studenti con reddito familiare zero, se non ce ne sono stampare un messaggio del tipo “Non esistono studenti con reddito zero”.

#include <iostream>
using namespace std;
int N, M, V, CS, C7, CRO, CF, Mmax, Vmin;
char S;
float  RF, K, CV, RFmax;

int main ()
{
K=0;
C7=0;
CV=0;
CRO=0;
CF=0;
	cout<<"Programma che gestisce i dati di N studenti "<<endl;
	do
 		{
 			cout<<"introdurre il numero degli studenti: ";
 			cin>>N;
 		}
 	while ((N<1) or (N>300));
 	
 //
 //inizio ciclo for
 //

 for (CS=1;CS<=N;CS=CS+1)
 {
 	do
 		{
 			cout<<"Introdurre la matricola dello studente: ";
 			cin>>M;
 		}
 	while (M<1);
 	
 	do
 		{
			cout<<"Introdurre il sesso dello studente: ";
			cin>>S;
		}
	while((S!='F') and (S!='M') and ('m') and ('f'));
	do
		{
			cout<<"Introdurre il reddito familiare dello studente:";
			cin>>RF;
		}
	while (RF<0);

	do
		{
			cout<<"Introdurre il voto finale dello studente:";
			cin>>V;
		}
 	while ((V<6)or (V>10));
 	
 	if (V>=7)
	{
		K=K+RF;
		C7=C7+1;
	}
 	CV=CV+V;
 	
  	if(CS>1)
 		{
 			if(Vmin>V)
				{	
					Vmin=V;
				}
				
			if(RFmax<RF)
				{
					RFmax=RF;
					Mmax=M;
				}
		}
	
	else
		{
			Vmin=V;
 			RFmax=RF;
 			Mmax=M;
		}	
	
	if (S=='F')
		{
			CF=CF+1;
		}

	if (RF==0)
		{ 
			cout<<"Il sesso dello studente \212: "<<S<<endl;
			cout<<"La matricola dello studente \212: "<<M<<endl;
			CRO=1;
		}
}
//
// fine ciclo for
//

	K=K/C7;
	
	cout<<"il prezzo medio degli studenti con voto superiore alla sufficenza \212: "<<K<<endl;
	
	CV=CV/N;
	
	cout<<"Il voto medio tra tutti gli alunni \212: "<<CV<<endl;
	
	cout<<"Il voto minimo \212: "<<Vmin<<endl;
	
	cout<<"La matricola dello studente con il reddito familiare pi\227 alto \212: "<<Mmax<<endl;
	
	cout<<"il numero degli studenti di sesso femminile \212: "<<CF<<endl;
	
	if (CRO==0)
		{ 
			cout<<"Non esistono studenti con reddito zero"<<endl;
		}

	system ("pause");
	return (0);
}

9 Risposte

  • Re: Mandare in crash questo programma [C++]

    Il debugger, questo sconosciuto...
  • Re: Mandare in crash questo programma [C++]

    Prova a scrivere

    ciao

    quando ti chiede il numero degli studenti
  • Re: Mandare in crash questo programma [C++]

    oregon ha scritto:


    Prova a scrivere

    ciao

    quando ti chiede il numero degli studenti
    Grazie per la risposta, a questo problema ci ho pensato subito dopo che ho scritto la domanda, il programma richiede il numero degli studenti all'infinito...come potrei risolvere?

    P.S: come IDE uso Dev-C++, sicuramente non è uno dei migliori ma la mia scuola usa questo.
  • Re: Mandare in crash questo programma [C++]

    Aggiungi un

    #include <limits>

    e una
    
    		if (cin.fail())
    		{
    			cin.clear();
    			cin.ignore(numeric_limits<streamsize>::max(), '\n');
    		}
    
    subito dopo la cin >> N;

    Ma anche questa

    while((S!='F') and (S!='M') and ('m') and ('f'));

    è sbagliata ...
  • Re: Mandare in crash questo programma [C++]

    oregon ha scritto:


    Aggiungi un

    #include <limits>

    e una
    
    		if (cin.fail())
    		{
    			cin.clear();
    			cin.ignore(numeric_limits<streamsize>::max(), '\n');
    		}
    
    subito dopo la cin >> N;

    Ma anche questa

    while((S!='F') and (S!='M') and ('m') and ('f'));

    è sbagliata ...
    Grazie ancora , ecco il mio file sorgente aggiornato:
    
    #include <iostream>
    #include <limits>
    using namespace std;
    int N, M, V, CS, C7, CRO, CF, Mmax, Vmin;
    char S;
    float  RF, K, CV, RFmax;
    
    int main ()
    {
    K=0;
    C7=0;
    CV=0;
    CRO=0;
    CF=0;
    	cout<<"Programma che gestisce i dati di N studenti "<<endl;
    	do
     		{
     			cout<<"introdurre il numero degli studenti: ";
     			cin>>N;
     			if (cin.fail())
    				{
    					cin.clear();
    					cin.ignore(numeric_limits<streamsize>::max(), '\n');
    				}
     		}
     	while ((N<1) or (N>300));
     	
     //
     //inizio ciclo for
     //
    
     for (CS=1;CS<=N;CS=CS+1)
     {
     	do
     		{
     			cout<<"Introdurre la matricola dello studente: ";
     			cin>>M;
     		}
     	while (M<1);
     	
     	do
     		{
    			cout<<"Introdurre il sesso dello studente: ";
    			cin>>S;
    		}
    	while((S!='F') and (S!='M') and (S!='m') and (S!='f'));
    	do
    		{
    			cout<<"Introdurre il reddito familiare dello studente:";
    			cin>>RF;
    		}
    	while (RF<0);
    
    	do
    		{
    			cout<<"Introdurre il voto finale dello studente:";
    			cin>>V;
    		}
     	while ((V<6)or (V>10));
     	
     	if (V>=7)
    	{
    		K=K+RF;
    		C7=C7+1;
    	}
     	CV=CV+V;
     	
      	if(CS>1)
     		{
     			if(Vmin>V)
    				{	
    					Vmin=V;
    				}
    				
    			if(RFmax<RF)
    				{
    					RFmax=RF;
    					Mmax=M;
    				}
    		}
    	
    	else
    		{
    			Vmin=V;
     			RFmax=RF;
     			Mmax=M;
    		}	
    	
    	if ((S=='F') or (S=='f'))
    		{
    			CF=CF+1;
    		}
    
    	if (RF==0)
    		{ 
    			cout<<"Il sesso dello studente \212: "<<S<<endl;
    			cout<<"La matricola dello studente \212: "<<M<<endl;
    			CRO=1;
    		}
    }
    //
    // fine ciclo for
    //
    
    	K=K/C7;
    	
    	cout<<"il reddito familiare medio degli studenti con voto superiore alla sufficenza \212: "<<K<<endl;
    	
    	CV=CV/N;
    	
    	cout<<"Il voto medio tra tutti gli alunni \212: "<<CV<<endl;
    	
    	cout<<"Il voto minimo \212: "<<Vmin<<endl;
    	
    	cout<<"La matricola dello studente con il reddito familiare pi\227 alto \212: "<<Mmax<<endl;
    	
    	cout<<"il numero degli studenti di sesso femminile \212: "<<CF<<endl;
    	
    	if (CRO==0)
    		{ 
    			cout<<"Non esistono studenti con reddito zero"<<endl;
    		}
    
    	system ("pause");
    	return (0);
    }
    
    Ho un'altra domanda, non avendo studiato ancora questa libreria e queste funzioni, potresti gentilmente spiegarmi a cosa servono e come funzionano?
  • Re: Mandare in crash questo programma [C++]

    Guarda che il problema della cin vale per tutti gli input numerici ...
  • Re: Mandare in crash questo programma [C++]

    oregon ha scritto:


    Guarda che il problema della cin vale per tutti gli input numerici ...
    Mi è sfuggito...ho appena modificato
  • Re: Mandare in crash questo programma [C++]

    Adesso ho un altro problema, inserendo nel reddito familiare
    if (cin.fail())
    		{
    		cin.clear();
    		cin.ignore(numeric_limits<streamsize>::max(), '\n');
    		}
    il programma "prende" la lettera messa per prova in input. È possibile che questo accade dato che la variabile RF è di tipo float e non integer?
    
    Programma che gestisce i dati di N studenti
    introdurre il numero degli studenti: g
    introdurre il numero degli studenti: 3
    Introdurre la matricola dello studente: g
    Introdurre la matricola dello studente: 3
    Introdurre il sesso dello studente: f
    Introdurre il reddito familiare dello studente:g 	//L'errore è qui
    Introdurre il voto finale dello studente:g
    Introdurre il voto finale dello studente:7
    Il sesso dello studente è: f
    La matricola dello studente è: 3
    
    P.S. Non scrivendo if cin.fail etc. solo nel reddito familiare, il programma chiede il voto 2 volte e non funziona lo stesso
  • Re: Mandare in crash questo programma [C++]

    Alla fine ci sono riuscito, il mio problema era ( come ipotizzavo) in questo punto:
    do
    		{
    			cout<<"Introdurre il reddito familiare dello studente:";
    			cin>>RF;
    
    			if (cin.fail())
    				{
    					cin.clear();
    					cin.ignore(numeric_limits<streamsize>::max(), '\n');
    					
    				}
    		}
    	while (RF<0);
    Per risolvere mi è bastato aggiungere RF=-1 o a qualsiasi altro numero negativo dopo cin.ignore(numeric_limits<streamsize>::max(), '\n');
    Infine vorrei ancora ringraziare oregon, senza l'input che mi ha dato non sarei mai riuscito a risolvere il mio problema
Devi accedere o registrarti per scrivere nel forum
9 risposte