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

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

Δημοσ.

Καλησπέρα σας

 

Έχω γράψει το παρακάτω πρόγραμμα όπου οι γραμμές με έντονα γράμματα δεν εκτελούνται καθόλου. Να σημειωθεί ότι αν σβήσω τον κώδικα εντός του βρόγχου αυτού που υπάρχει πάνω από τις γραμμές αυτές, μετά εκτελοούνται!

Μπορέιτε να μου πείτε τι συμβαίνει; (το έτρεξα σε 2 compilers, codeblocks και dev c++ όμως και στα 2 το ίδιο).

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
typedef struct
{
    int number;
    char *name;
}data;
 
int main(void)
{
    char buf[256];
    int i=0, length=0;
 
    data table[4];
 
    for (i=0; i<=3; i++)
    {
        printf ("\nGive number %d ", i+1);
        scanf ("%d", &table.number);
 
        printf ("Give name %d \n", i+1);
        gets(buf);
        length=strlen(buf);
        table.name=malloc((length+1)*sizeof(char));
        strcpy(table.name, buf);
    }
 
    for (i=0; i<=3; i++)
    {
        printf ("\nNumber is %d \n", table.number);
        printf ("\nName is %s \n", table.name);
    }
 
    return 0;
}
Δημοσ.

 

Καλησπέρα σας

 

Έχω γράψει το παρακάτω πρόγραμμα όπου οι γραμμές με έντονα γράμματα δεν εκτελούνται καθόλου. Να σημειωθεί ότι αν σβήσω τον κώδικα εντός του βρόγχου αυτού που υπάρχει πάνω από τις γραμμές αυτές, μετά εκτελοούνται!

Μπορέιτε να μου πείτε τι συμβαίνει; (το έτρεξα σε 2 compilers, codeblocks και dev c++ όμως και στα 2 το ίδιο).

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
typedef struct
{
    int number;
    char *name;
}data;
 
int main(void)
{
    char buf[256];
    int i=0, length=0;
 
    data table[4];
 
    for (i=0; i<=3; i++)
    {
        printf ("\nGive number %d ", i+1);
        scanf ("%d", &table.number);
 
        printf ("Give name %d \n", i+1);
        gets(buf);
        length=strlen(buf);
        table.name=malloc((length+1)*sizeof(char));
        strcpy(table.name, buf);
    }
 
    for (i=0; i<=3; i++)
    {
        printf ("\nNumber is %d \n", table.number);
        printf ("\nName is %s \n", table.name);
    }
 
    return 0;
}

 

 

χρησιμοποίησε την fgets.

http://www.tutorialspoint.com/c_standard_library/c_function_fgets.htm

Δημοσ.

Δεν είναι αυτό! το αντικατέστησα με fgets(buf,256,stdin) και πάλι τα ίδια..

 

με την scanf("%s",buf); δουλεύει;

αλλιώς δώσε περισσότερα στοιχειά (errors,τι ζητάς ακριβός να κανει το πρόγραμμα)

Δημοσ.

με την scanf("%s",buf); δουλεύει;

αλλιώς δώσε περισσότερα στοιχειά (errors,τι ζητάς ακριβός να κανει το πρόγραμμα)

 

Φίλε δουλεύει με scanf ! errors δεν έβγαλε κανένα, ούτε προειδοποιήσεις.. Για ποιο λόγο όμως η εντολή δεν μπορούσε να εκτελεστεί;

Δημοσ.

άπλα γιατί η gets διαβάζει μέχρι να βρει \n (κάλο είναι να μην την χρησιμοποιούμε γιατί είναι και obsolete άλλα και δεν την προτείνουν ακόμα και οι compilers τουλάχιστον ο gcc σου πετά warrning και επίσης έχει κακό ιστορικό)

το πρόβλημα ήταν στην scanf άπλα έπρεπε να βάλεις scanf("%d\n",&...); gets(buf); και θα παίζει.

Δημοσ.

 

Καλησπέρα, αν θες δες στην θέση της συνάρτηση gets να χρησιμοποιήσεις την scanf και να ενοποιήσεις τον κώδικα που βρίσκεται στους βρόχους σε μια for.

Δημοσ.

άπλα γιατί η gets διαβάζει μέχρι να βρει \n (κάλο είναι να μην την χρησιμοποιούμε γιατί είναι και obsolete άλλα και δεν την προτείνουν ακόμα και οι compilers τουλάχιστον ο gcc σου πετά warrning και επίσης έχει κακό ιστορικό)

το πρόβλημα ήταν στην scanf άπλα έπρεπε να βάλεις scanf("%d\n",&...); gets(buf); και θα παίζει.

 

Σε ευχαριστώ πολύ φίλε μου!

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...