2016-09-11 2 views
0

Ich bin neu in C, und ich habe eine Zuweisung, wo ich einen Eingang von n Leerzeichen getrennt Ganzzahlen und q ganze Zahlen durch neue Zeilen getrennt erhalten. Ich mag die n ganzen Zahlen in einem Array a und die q ganzen Zahlen in einem anderen Array m speichern.Platz getrennte Ganzzahlen zu Array

Das ist mein Code so weit und es funktioniert wie erwartet für m, aber die Elemente in a sind ziemlich zufällig. Wie kann ich die durch Leerzeichen getrennten Ganzzahlen in einem Array speichern?

int main() { 

    // The code 
    int n, q; 
    int a[n]; 
    int m[q]; 

    scanf("%d %d", &n, &q); 

    for (int i=0; i<n; i++) { 
     scanf("%d", &a[i]); 
    } 

    for (int i=0; i<q; i++) { 
     scanf("%d", &m[i]); 
    } 

    // Troubleshooting 
    for (int i=0; i<n; i++) { 
     printf("%d ", a[i]); 
    } 

    printf("\n"); 

    for (int i=0; i<q; i++) { 
     printf("%d\n", m[i]); 
    } 

    return 0; 
} 

Zum Beispiel, wenn ich Eingang:

1 2 3 4 5 6 
0 
1 
2 
3 
4 
5 

ich:

4 5 3 4 5 6 
0 
1 
2 
3 
4 
5 
+0

Willkommen bei Stack Overflow. Bitte beachten Sie, dass die bevorzugte Art zu sagen "Danke" hier ist durch Up-Voting gute Fragen und hilfreiche Antworten (sobald Sie genug Ruf zu tun haben), und durch die Annahme der hilfreichsten Antwort auf alle Fragen Sie fragen (Das gibt Ihnen auch einen kleinen Schub für Ihre Ruf). Bitte lesen Sie die [Über] Seite und auch [Wie stelle ich Fragen? hier?] (Http://stackoverflow.com/help/how-to-ask) und [Was mache ich, wenn jemand meine Frage beantwortet ?] (http://stackoverflow.com/help/someone-answers) –

+0

Möchten Sie nur gültige Eingaben analysieren oder ungültige Eingaben erkennen? – chux

Antwort

3

Ich bin nicht sicher, aber wenn ich Ihren Code ausführen i Segmentierung Fehler erhalten, weil statt:

int n, q; 
    int a[n]; 
    int m[q]; 

    scanf("%d %d", &n, &q); 

Sie sollten zuerst r ead n, q und dann erklären, eine [n], m [q] wie folgt aus:

int n, q; 
scanf("%d %d", &n, &q); 
int a[n]; 
int m[q]; 

Ich habe versucht, den Code laufen zu geben 6 6 zum ersten Scanf so n = 6, q = 6 und danach Als Ihr Beispiel gab ich eine Eingabe:

1 2 3 4 5 6 
0 
1 
2 
3 
4 
5 

und es gedruckt rechts.

+0

Vielen Dank, das hat es gelöst! – Chr

2

Verwenden scanf nicht. scanf is notoriously hard to use, und es ist besonders falsch für Ihre Situation, weil es nicht zwischen verschiedenen Arten von Leerzeichen (Leerzeichen im Vergleich zu Zeilenumbrüchen) unterscheidet.

Stattdessen sollten Sie Zeile für Zeile Zeile für Zeile mit fgets lesen und dann jede Zeile mit sscanf oder strtok analysieren.

Verwandte Themen