Προειδοποίηση: program ignoring return value of 'scanf'  Το θέμα επιλύθηκε

...ασύγχρονα μαθήματα γλώσσας C

Προειδοποίηση: program ignoring return value of 'scanf'  Το θέμα επιλύθηκε

Δημοσίευσηαπό spyridon1971 » 14 Οκτ 2013, 23:30

Καλησπέρα παιδιά!

Κατ' αρχήν ζητώ συγγνώμη που απασχολώ το φόρουμ με αυτό. Δεν έχω καμία πρόθεση να ρωτάω κάθε τρεις και λίγο αλλά αυτό μου το φέρνει συχνά ο compiler και στις απαντήσεις που βρήκα όταν το αναζήτησα στο google δεν διάβασα κάτι που να είναι σαφές (τουλάχιστον δεν το κατάλαβα εγώ :-)).

Λοιπόν, στην παρακάτω ασκησούλα, ο code::blocks μου φέρνει Προειδοποίηση: program ignoring return value of 'scanf', declared with attribute warn_unused_result.

Τι τον ενοχλεί και ποιός είναι ο κανόνας που παραβαινω;

Κώδικας: Επιλογή όλων
#include <stdio.h>
int main()
{
   int annual_income, tax;

   printf ("enter your annual income");
   scanf("%d", &annual_income);
   if (annual_income<=0)
   {printf ("lathos noumero");}
   else if (annual_income>=0 && annual_income<=12000 )
    {tax=0;
    printf ("your tax is %d euros", tax);}
    else if (annual_income>=12001 && annual_income<=14000 )
    {tax=annual_income*0.15;
    printf ("your tax is %d euros", tax);}
    else if (annual_income>=14001 && annual_income<=30000 )
    {tax=annual_income*0.3;
    printf ("your tax is %d euros", tax);}
    else if (annual_income>30000 )
    {tax=annual_income*0.4;
    printf ("your tax is %d euros", tax);}
   return 0;
}


Ευχαριστώ πολύ!
Γνώσεις ⇛ Linux: Ανύπαρκτες┃Προγραμματισμός:C (Αρχάριος)┃Αγγλικά: Άριστα
Laptop 1: Λειτουργικό ⇛ Ubuntu 16.04 (32bit) σε HP 530 Laptop
Προδιαγραφές ⇛ T2600 │4 GB│Intel Corporation Mobile 945GME Express Integrated Graphics Controller (rev 03)│LG L1915S
Laptop 2: Λειτουργικό ⇛ Ubuntu 14.04 LTS σε Turbo-X Laptop Cardio Gi546-450
Προδιαγραφές ⇛ Intel-Core i5-460M-2.53 GHz│4 GB DDR3│ATI Radeon HD 5165│LG L1915S│Atheros AR9285
spyridon1971
babeTUX
babeTUX
 
Δημοσιεύσεις: 108
Εγγραφή: 03 Φεβ 2010, 15:32
Τοποθεσία: Πειραιάς
Εκτύπωση

Re: Προειδοποίηση: program ignoring return value of 'scanf'

Δημοσίευσηαπό simosx » 15 Οκτ 2013, 01:52

spyridon1971 έγραψε:Λοιπόν, στην παρακάτω ασκησούλα, ο code::blocks μου φέρνει Προειδοποίηση: program ignoring return value of 'scanf', declared with attribute warn_unused_result.


Απλά το Code:Blocks ενεργοποιεί την πιο αυστηρή εκδοχή του gcc κατά τη μεταγλώττιση. Αν μεταγλώττιζες από τη γραμμή εντολών με
gcc mytest.c -o mytest
τότε δε θα εμφάνιζε την προειδοποίηση.

Ο λόγος που έχεις την προειδοποίηση είναι ότι η εντολή scanf() επιστρέφει μια τιμή, και εσύ δεν την ελέγχεις. Είναι καλή πρακτική να ελέγχεις την επιστρεφόμενη τιμή ώστε π.χ. να διακόπτεις την εκτέλεση αν ο χρήστης δεν έγραψε κάτι.
Σε περίπτωση που δε θέλεις να βλέπεις αυτού του είδους τις προειδοποιήσεις, μπες στις ρυθμίσεις του προγράμματος και άλλαξε τις επιλογές για προειδοποιήσεις (να μην εμφανίζει όλες τις προειδοποιήσεις).

Για να λάβεις δεδομένα από το πληκτρολόγιο, διάβασε και το άρθρο στο http://faq.cprogramming.com/cgi-bin/sma ... 1043284385 Αναφέρει μια καλή πρακτική με χρήση της fgets() αντί για τη scanf().
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: Προειδοποίηση: program ignoring return value of 'scanf'

Δημοσίευσηαπό spyridon1971 » 16 Οκτ 2013, 18:06

Αγαπητέ simosx, σε ευχαριστώ πάρα πολύ!
Γνώσεις ⇛ Linux: Ανύπαρκτες┃Προγραμματισμός:C (Αρχάριος)┃Αγγλικά: Άριστα
Laptop 1: Λειτουργικό ⇛ Ubuntu 16.04 (32bit) σε HP 530 Laptop
Προδιαγραφές ⇛ T2600 │4 GB│Intel Corporation Mobile 945GME Express Integrated Graphics Controller (rev 03)│LG L1915S
Laptop 2: Λειτουργικό ⇛ Ubuntu 14.04 LTS σε Turbo-X Laptop Cardio Gi546-450
Προδιαγραφές ⇛ Intel-Core i5-460M-2.53 GHz│4 GB DDR3│ATI Radeon HD 5165│LG L1915S│Atheros AR9285
spyridon1971
babeTUX
babeTUX
 
Δημοσιεύσεις: 108
Εγγραφή: 03 Φεβ 2010, 15:32
Τοποθεσία: Πειραιάς
Εκτύπωση

Re: Προειδοποίηση: program ignoring return value of 'scanf'

Δημοσίευσηαπό lucinos » 16 Οκτ 2013, 18:40

ρίξε μια ματιά σε αυτό το θέμα viewtopic.php?f=60&t=26106
προειδοποίηση: τρολλάρω λίγο την C (αλλά κατά τα άλλα πιστεύω ότι είμαι ακριβής)
Spoiler: show
Γνώσεις → Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Μέτριος
Λειτουργικό → Ubuntu 11.04 natty 64-bit (el_GR.UTF-8)
Προδιαγραφές → CPU: 4x Intel Core i5 CPU 750 2.67GHz ‖ RAM 3953 MiB ‖ ASRock P55DE3
Κάρτες γραφικών: nVidia G92 [GeForce GTS 250] ⎨10de:0615⎬ (rev a2)
Δίκτυα: eth0: Realtek RTL8111/8168B PCI Express Gigabit Ethernet controller ⎨10ec:8168⎬ (rev 03)
Άβαταρ μέλους
lucinos
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 828
Εγγραφή: 12 Δεκ 2010, 22:04
Εκτύπωση


Επιστροφή στο Μαθήματα C