2017-04-12 5 views
-2

Ich versuche Code für Student Name, Nachname und ID zu tun, dann druckt es mit stabilem Format. Beispiel: (Geben Sie Vor- und Nachnamen ein: "Alp David Oflas" Geben Sie ID: "20110702037" ein, dann sollte die Ausgabe wie folgt lauten "OFLAS, Alp David, trat 2011 als 37st Student in die Technik ein.") Also versuche ich damit Code, dass außer ID-Teil, aber auf repl.it Ich bin "mit Status nicht-Null Status beendet" und wenn ich versuche auf Ubuntu bekomme ich "Segmentierung Fehler (Core Dump)". So kann dieses Problem nicht bis 4 Stunden lösen. Können Sie mir helfen, welcher Teil des Codes diesen Fehler verursacht?Segmentation Fault auf String C

Hinweis: Ich kann keine andere Funktion verwenden. Ich muss es mit Schleifen und Vergleich machen.

#include <stdio.h> 

void output(char name[100],char ID[100]){ 

    char surname[100]; 
//Calculating name string's length//  
    int nameL; 
    for(nameL=0;name[nameL]!="\0";nameL++); 

    int i=nameL; 
    int j=0; 
    int flag; 
    flag = "FALSE"; 
//Geting surname from value with decreasing i. It could be something like "Alp David Oflas" so we need just surname// 
    while (flag="FALSE"){ 
     if (name[i] == " "){ 
      flag="TRUE"; 
     } 
     else{ 
      surname[j] = name[i]; 
      i--; 
      j++; 
      flag = "FALSE"; 
     } 
    } 
    surname[j]="\0"; 
//Previous surname just be like "salfO" so need to convert it// 
    char newsurname[100]; 
    int surnameL; 
    for(surnameL=0;surname[surnameL] !="\0";surnameL++); 
    int k=0; 

    while (surname[k] != "\0"){ 
     newsurname[k]=surname[surnameL]; 
     k++; 
     surnameL--; 
    } 
    newsurname[k] = "\0"; 

//Just capitalizing surname for dependant output// 
    int x=0; 
    while (newsurname[x] !="\0"){ 
     if (newsurname[x] >= "a" && newsurname[x] <= "z"){ 
      newsurname[x] = (newsurname[x] -32); 
     } 
     x++; 
    }   

    printf("%s",newsurname); 

} 

//Geting values from keyboard// 
int main(){ 

    char name[100]; 
    char ID[100]; 
    printf("Enter name and surname:\n"); 
    gets (name); 
    printf("Enter ID:\n"); 
    gets (ID); 
    output(name,ID); 
    return 0; 
} 
+0

Untersuchen Sie jede Warnung. –

+0

@DavidSchwartz like (nicht verwenden "bekommt") –

+1

'int flag; Flag = "FALSCH"; while (flag = "FALSE") sieht überhaupt nicht gut aus. – Pang

Antwort

0

Gelöst ... Problem auf "\0" es '\0' sein muss.