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

C. Που είναι το λάθος


cyber_katsarida

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

Δημοσ.

δεν μπορώ να καταλάβω που είναι το λάθος.

χρησιμοποιώ το code::blocks

όταν το τρέχω στην 3η do while εμφανίζεται η Printf 2 φορές.

κάτι παίζει με τη εισαγωγή του χαρακτήρα μάλλον

 

>#include<stdio.h>
struct pro {
       int code;
       float pos;
       char pit;
       float ap;
   };

main()
{


   struct pro pinakas[2];
   int i;


   for(i=0;i<2;i++)
   {
       do{
           printf("%d-code\n",i);
           scanf("%d",&pinakas[i].code);
           }while(pinakas[i].code<100 && pinakas[i].code>999);

       do{
           printf("%d-pos\n",i);
           scanf("%f",&pinakas[i].pos);
           }while(pinakas[i].pos<0);

           do{ //3 error
           printf("%d-pit\n",i);
           scanf("%c",&pinakas[i].pit);
           }while(pinakas[i].pit!='a' && pinakas[i].pit!='b' && pinakas[i].pit!='c');

            do{
           printf("%d-ap\n",i);
           scanf("%f",&pinakas[i].ap);
           }while(pinakas[i].ap<0);
   }
}

Δημοσ.

μόλις πάει να μπει στην 3η do. εκει που έχω σημειώσει error και ενω πρέπει να μου εμφανίσει: 0-pit

κι εγώ να πληκτρολογίσω το χαρακτήρα

μου εμφανίζει:

0-pit

0-pit

και περιμένει εισαγωγή.

εγώ μια printf έχω βάλει

 

κάτι παίζει με την μεταβλητή τύπου char διότι αν την κάνω int όλα πάνε καλά.

Δημοσ.

Κάτι παρόμοιο μου έκανε προχθές σε μία άσκηση και εκτύπωνε 2 φορές ενώ εγώ του έλεγα 1. Δοκίμασε να βγάλεις το printf έξω από την επανάληψη, τρέχτω, δες αν το ξανακάνει και αν δεν το κάνει ξαναβάλτο μέσα.

Δημοσ.

δεν έχω δοκιμάσει απλά θα βγάλω την printf έξω από την do while όπως είπες και τελείωσε η υπόθεση.

Το θέμα πλέον είναι γιατί να συμβαίνει αυτό.Δε στέκει.

Δημοσ.
δεν έχω δοκιμάσει απλά θα βγάλω την printf έξω από την do while όπως είπες και τελείωσε η υπόθεση.

Το θέμα πλέον είναι γιατί να συμβαίνει αυτό.Δε στέκει.

 

do while= το κανει μια φορα και μετα αν ισχυει η προταση του while το ξανακανει μεχρι να μην ισχυει. βοηθησα;

Δημοσ.
do while= το κανει μια φορα και μετα αν ισχυει η προταση του while το ξανακανει μεχρι να μην ισχυει. βοηθησα;

 

το παληκάρι μια ανάλυση στα τεχνικά με τον garbage collector της c ζήτησε, όχι dummies tutorial :P

 

μαν η λύση, και τρέχει (copy-paste απο το link που πόσταρε προηγουμένως ο mvaggel).

 

>
// *****************************************************************************
//
// Ta euxaristo ston mvaggel, k emena me eixe apasxolisei paliotera.
//
//******************************************************************************


#include<stdio.h>
struct pro {
       int code;
       float pos;
       char pit;
       float ap;
   };

main()
{


   struct pro pinakas[2];
   int i;


   for(i=0;i<2;i++)
   {
       do{
           printf("%d-code\n",i);
           scanf("%d",&pinakas[i].code);
    getchar();
           }while(pinakas[i].code<100 && pinakas[i].code>999);

       do{
           printf("%d-pos\n",i);
           scanf("%f",&pinakas[i].pos);
    getchar();	
           }while(pinakas[i].pos<0);

           do{ //3 error
           printf("%d-pit\n",i);
           scanf(" %c",&pinakas[i].pit);
    getchar();
           }while(pinakas[i].pit!='a' && pinakas[i].pit!='b' && pinakas[i].pit!='c');

           do{
           printf("%d-ap\n",i);
           scanf("%f",&pinakas[i].ap);
    getchar();
           }while(pinakas[i].ap<0);
   }
}

 

 

@mvaggel

 

φίλε μου πολύ καλός ο σύνδεσμος, μέσα σε 3 ποστ αναλύθηκε τόσο απλά το ζήτημα, που στο αντίστοιχο εργαστήριο στη σχολή μου πριν απο 2 περίπου χρόνια, οι καθηγητές το έκαναν να μοιάζει με την απίστευτη τεχνοκρατική λεπτομέρεια.

Δημοσ.

Τα credit πάνε σε αυτόν που απάντησε στο link. Εγώ απλά googlισα.

 

Όσο για την getchar(), νομίζω έπρεπε να την προσθέσεις πριν την scanf, ώστε να "μαζέψει" το "newline" από την προηγούμενη είσοδο.

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

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

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