Προς το περιεχόμενο

κόλλησα σε άσκηση στη C


saavedra29

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σας παιδιά και καλή χρονιά να έχετε!

Προσπαθώ να κάνω μιά άσκηση στο βιβλίο ''C προγραμματισμός" και έχω κολήσει.

Ο κώδικας που γράφω είναι αυτός:

 

 

>/*υπολογισμός νέου πιστωτικού υπολοίπου πελάτη 
και αν αυτό ξεπερνάει το νέο πιστωτικό όριο.*/
#include <stdio.h>

int main()
{

int old , new  , rest , cou = 1;
char cod;

while ( cou <= 3 ) {
 printf ( "εισήγαγε κωδικό:" );
 scanf ( "%s\n" , &cod);
 printf ( "εισήγαγε υπόλοιπο:" );
 scanf ( "%d\n" , &rest );
 printf ( "εισήγαγε παλιό πιστ. όριο:" );
 scanf ( "%d\n" , &old );
 old/=2;
 printf ( "το νέο πιστ. όριο είναι %d\n" , old );
 	if ( old < rest )
 		printf ( "το υπόλοιπο του πελάτη %d είναι μεγαλύτερο από το νέο πιστωτικό όριο\n" , cod );
 cou++;
 }
 return 0;
}

 

 

Όταν λοιπόν τρέχω το πρόγραμμα και εισάγω τον κωδικό μετά με βγάζει σε μία κενή γραμμή όπου πρέπει να πληκτρολογίσω ένα νούμερο για να συνεχίσει.Πληκτρολογώ το νούμερο και... να το αποτέλεσμα:

>aris@saavedra29:~/προγράμματα c/mine/4th chapter$ ./pro4-17
εισήγαγε κωδικό:1218
23
εισήγαγε υπόλοιπο:1700
εισήγαγε παλιό πιστ. όριο:2000
το νέο πιστ. όριο είναι 850
εισήγαγε κωδικό:

To 23 στην τρίτη σειρά είναι τυχαίο, για να συνεχίσει το πρόγραμμα.

Αντί για να διαιρέσει με το 2 το παλιό πιστ. όριο διαιρεί το υπόλοιπο.

Τί λάθος κάνω;

Δημοσ.

το "scanf ( "%s\n" , &cod);"

 

πρέπει να γίνει scanf ( "%s" , cod);

 

χωρίς το & δηλαδή γιατι διαβάζεις συμβολοσειρά και να αλλάξεις το char cod; σε char cod[megethos kwdikou];

για να είναι συμβολοσειρά και όχι χαρακτήρας όπως το είχες δηλώσει.

Δημοσ.

karabouzouk έκανα αυτό που είπες αλλά δεν είχε αποτέλεσμα.

Άλλαξα όμως τον κώδικα έτσι:

 

>/*υπολογισμός νέου πιστωτικού υπολοίπου πελάτη 
και αν αυτό ξεπερνάει το νέο πιστωτικό όριο.*/
#include <stdio.h>

int main()
{

int old , new  , rest , cou = 1;
char cod;

while ( cou <= 3 ) {
 printf ( "εισήγαγε κωδικό:" );
 scanf ( "%c" , &cod);
 printf ( "εισήγαγε υπόλοιπο:" );
 scanf ( "%d\n" , &rest );
 printf ( "εισήγαγε παλιό πιστ. όριο:" );
 scanf ( "%d\n" , &old );
 old/=2;
 printf ( "το νέο πιστ. όριο είναι %d\n" , old );
 	if ( old < rest )
 		printf ( "το υπόλοιπο του πελάτη %d είναι μεγαλύτερο από το νέο πιστωτικό όριο\n" , cod );
 cou++;
 }
 return 0;
}

 

και εξαφανίστηκε εκείνη η άσχετη γραμμή όπου έπρεπε να εισάγω κάτι.

Το πρόβλημα όμως που αντι να διαιρέσει με 2 το παλιό πιστ. όριο διαιρεί το υπόλοιπο παραμένει:

>aris@saavedra29:~/προγράμματα c/mine/4th chapter$ ./pro4-17
εισήγαγε κωδικό:1218
εισήγαγε υπόλοιπο:1700
εισήγαγε παλιό πιστ. όριο:2000
το νέο πιστ. όριο είναι 850
εισήγαγε κωδικό:εισήγαγε υπόλοιπο:

 

---------- Το μήνυμα προστέθηκε στις 13:11 ----------

 

karabouzouk έκανα αυτό που είπες αλλά δεν είχε αποτέλεσμα.

Άλλαξα όμως τον κώδικα έτσι:

 

>/*υπολογισμός νέου πιστωτικού υπολοίπου πελάτη 
και αν αυτό ξεπερνάει το νέο πιστωτικό όριο.*/
#include <stdio.h>

int main()
{

int old , new  , rest , cou = 1;
char cod;

while ( cou <= 3 ) {
 printf ( "εισήγαγε κωδικό:" );
 scanf ( "%c" , &cod);
 printf ( "εισήγαγε υπόλοιπο:" );
 scanf ( "%d\n" , &rest );
 printf ( "εισήγαγε παλιό πιστ. όριο:" );
 scanf ( "%d\n" , &old );
 old/=2;
 printf ( "το νέο πιστ. όριο είναι %d\n" , old );
 	if ( old < rest )
 		printf ( "το υπόλοιπο του πελάτη %d είναι μεγαλύτερο από το νέο πιστωτικό όριο\n" , cod );
 cou++;
 }
 return 0;
}

 

και εξαφανίστηκε εκείνη η άσχετη γραμμή όπου έπρεπε να εισάγω κάτι.

Το πρόβλημα όμως που αντι να διαιρέσει με 2 το παλιό πιστ. όριο διαιρεί το υπόλοιπο παραμένει:

>aris@saavedra29:~/προγράμματα c/mine/4th chapter$ ./pro4-17
εισήγαγε κωδικό:1218
εισήγαγε υπόλοιπο:1700
εισήγαγε παλιό πιστ. όριο:2000
το νέο πιστ. όριο είναι 850
εισήγαγε κωδικό:εισήγαγε υπόλοιπο:

μπα, λάθος είναι πάλι.

Δημοσ.

τελικά τα κατάφερα! Ο τελικός κώδικας ειναι:

 

>int main()

{

int old , new  , rest , cou = 1;
char cod[4];

 
while ( cou <= 3 ) {
 printf ( "εισήγαγε κωδικό:" );
 scanf ( "%s" , cod);
 printf ( "εισήγαγε υπόλοιπο:" );
 scanf ( "%d" , &rest );
 printf ( "εισήγαγε παλιό πιστ. όριο:" );
 scanf ( "%d" , &old );
 old/=2;
 printf ( "το νέο πιστ. όριο είναι %d\n" , old );
 	if ( old < rest )
 		printf ( "το υπόλοιπο του πελάτη %s είναι μεγαλύτερο από το νέο πιστωτικό όριο\n" , cod );
 cou++;
  
 } 
 
 
 return 0;
}

 

Αν είναι δυνατόν, τόσα προγραμματάκια αυτού του τύπου έχω γράψει και είχα ξεχάσει ότι μετά από scanf αλλάζει μόνο του γραμμή:lol:

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...