Προειδοποίηση: περισσότερες μετατροπές «%» ό, τι τα επιχειρήματα των δεδομένων

ψήφοι
3

Είμαι νέος στο C και προσπαθώ να γράψω ένα πρόγραμμα ως μια ανάθεση. Ο χρήστης θα πρέπει εισόδου 7 άρματα οποία στη συνέχεια θα αποθηκεύονται σε έναν πίνακα.

#include <stdio.h>
#include <string.h>

int main() {
  float data[32];
  printf(Instert 7 values, separated by spaces: );
  scanf(%f %f %f %f %f %f %f, data);

  return 0;
}

Και Παίρνω το λάθος

warning: more '%' conversions than data arguments [-Wformat]
scanf(%f %f %f %f %f %f %f, data);

Προσπάθησα να αναζητήσει μια λύση σε απευθείας σύνδεση, αλλά εγώ δεν μπορούσα να το καταλάβω, τι κάνω λάθος;

Δημοσιεύθηκε 08/11/2018 στις 00:10
πηγή χρήστη
Σε άλλες γλώσσες...                            


3 απαντήσεις

ψήφοι
4

Αυτό

scanf("%f %f %f %f %f %f %f", data);

θα πρέπει να είναι κάπως έτσι

scanf("%f %f %f %f %f %f %f", &data[0], &data[1], &data[2], &data[3], &data[4], &data[5], &data[6]);

Η λειτουργία scanf απαιτεί, για κάθε % -κάτι για το αρχικό string, ένα δείκτη σε μια μεταβλητή όπου θα αποθηκεύει την τιμή εισόδου.

Θα μπορούσε εναλλακτικά να γράψω σαν αυτό:

scanf("%f %f %f %f %f %f %f", data, data+1, data+2, data+3, data+4, data+5, data+6);

Μνήμης βάση τη διεύθυνση / δείκτης του πίνακα σας είναι δεδομένα . Όταν το συνοψίσω με i , όπου i είναι ένας θετικός ακέραιος, μπορείτε να πάρετε το δείκτη στο i- θέση στον πίνακα.

Απαντήθηκε 08/11/2018 στις 00:16
πηγή χρήστη

ψήφοι
3

Θα μπορούσατε να χρησιμοποιήσετε ένα βρόχο:

for (int i = 0; i < 7; ++i)
    scanf("%f", &data[i]);

Με ανίχνευση σφαλμάτων:

#include <stdio.h>
#include <stdlib.h>

// ...

int num_values_read = 0;
for (; num_values_read < 7 && scanf("%f", &data[num_values_read]) == 1;
     ++num_values_read);

if (num_values_read != 7) {
    fputs("Input error :(\n\n", stderr);
    return EXIT_FAILURE;
}
Απαντήθηκε 08/11/2018 στις 00:16
πηγή χρήστη

ψήφοι
0

Αυτό σας λέει τι είναι λάθος, είναι απλά λυπηρό το γεγονός ότι το όνομα της μεταβλητής σας ταιριάζει με τα μηνύματα λάθους λέξεις. scanfθέλει μια μεταβλητή για κάθε %υπάρχει στη συμβολοσειρά μορφής. Αυτό σημαίνει ότι στο yout παράδειγμα αναμένει 7 μεταβλητές, αλλά παίρνει μόνο 1.

Απαντήθηκε 08/11/2018 στις 00:14
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more