2016-04-17 9 views
-3

Ich mache ein Programm, wo Benutzer Noten (1 bis 5) eingeben und dann die Klasse Array für die spätere Überprüfung hinzugefügt wird. Wenn der Benutzer den Buchstaben "s" eingibt, wird das Programm geschlossen. Wenn mein Programm abstürzt, warum? C Konvertieren von Zeichenfolge in Ganzzahl mit Arrays

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

int i; 
int grade[50]; 
char *num[20]; 

int enter(); 
int enter() 
{ 
    for (i=0; i<10; i++) { 

     printf("\nEnter grade:\nPress [s] to close program\n"); 
     scanf("%s",&num[i]); 
     if (strcmp(num[i],"s") == 0) { 
      break; 
     } else { 
      grade[i] = atoi(num[i]); 
     } 
    } 
} 

int main() 
{ 
    enter(); 

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

    return 0; 
} 
+0

lesen Char-Array und Zeichenfolgen in C erneut. –

+1

Warum nicht Array von ganzen Zahlen machen? Und Sie sollten das Array initialisieren, weil Sie die 10 Werte unabhängig davon drucken, ob sie in der Enter-Methode hinzugefügt werden. –

+0

Was ist, wenn der Benutzer (wir können Benutzern nicht vertrauen, können wir ????) "S" oder "q" eingeben "Ausfahrt"? :-) – pmg

Antwort

1

entfernen '*' von num [20] Erklärung, wie Sie 20 Zeichenfolge Zeiger deklarieren, so zu lesen und Werte mit num Vergleich [i] Fehler verursachen. Außerdem brauchen Sie nur eine einfache Zeichenfolge, um die Note zu bekommen.

+0

Entfernen von '*' wird nur dazu führen, Warnung: \t [Warnung] Übergabe Argument 1 von 'Atoi' macht Zeiger von Ganzzahl ohne Besetzung – Miner123

0

Der Grund, warum Programm abgestürzt ist, dass num ist ein Zeiger-Array, das Element num kann nicht Zeiger auf gültige Speicher, die zum Speichern der Zeichenfolge Sie eingegeben. können Sie char *num[10] zu char num[10][12] und 'scanf ("% s", & num [i]) to scanf("%s", num[i]) ändern, und alles wird in Ordnung sein.

Natürlich können Sie malloc auf dynamische alloc Speicher für jedes Element in num verwenden, wie:

`for(i = 0; i < 10; i ++){ 
    num[i] = (char*)malloc(sizeof(char) * 12); 
    } 
` 

Auch dachte, Sie scanf("%s", &num[i]) zu scanf("%s", num[i]) ändern müssen; Schließlich können Sie nicht vergessen, den Speicher zu befreien, den Sie nur dynamisch malloc.