2016-11-10 4 views
1

Ich habe keine Ahnung, warum dieser Code nicht funktioniert. Könnte mir bitte jemand helfen? (Ich möchte eine einfache Version-fix, wenn es möglich ist, denn ich habe nur begann vor C ein paar Wochen zu studieren.)So vergleichen Sie Wörter auf C

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


int main() 
{ 
    char *name="alina"; 
    char *input; 
    printf ("what's your name? \n"); 
    scanf ("%s",&input); 
    if (input=="alina") 
     printf("your name is %s good job!\n ",&name); 
    if (input!="alina") 
     printf("are you sure? open the program again and insert the correct name"); 
    while (1); 
} 
+0

Sie müssen Speicher für die Eingabe zuweisen - werfen Sie einen Blick auf malloc; Um Strings zu vergleichen, können Sie somethink wie strcmp verwenden. –

+0

Auch "&' before 'input' und' name' werden los. Sie sind bereits Zeiger. – itsme86

+0

könnte einer von Ihnen mir ein Beispiel geben, wie ich den Code richtig schreiben könnte? –

Antwort

0

Sie haben einige Fehler gemacht. Erstens, wenn Sie eine Zeichenfolge einfügen möchten, können Sie die %s verwenden, aber Sie müssen ein Array von char verwenden, in dem Sie diese Zeichenfolge speichern können. Das heißt, Sie müssen so etwas schreiben.

char input[100]; 
scanf("%s", input); 

und dann wird es funktionieren. Dieser Codeschnipsel bedeutet: Ich muss eine Zeichenfolge einfügen (speichern). Also erstelle ich zuerst einen Ort, an dem ich ihn speichern kann (achten Sie darauf, dass der String maximal 99 Zeichen haben muss; mein Array hat die Größe 100, aber das letzte Zeichen wird verwendet, um das Ende des Strings darzustellen), und dann benutze ich die scanf schreibe was ich will. Der zweite Fehler ist, dass wenn Sie zwei Strings vergleichen möchten, Sie nicht einfach die == oder != verwenden können, wie wenn Sie mit Zahlen arbeiten. Die string.h Bibliothek können Sie die strcmp Funktion zu verwenden, wie folgt aus:

if (strcmp(name, input) == 0) // this means the strings are equal 
    ... 
else 
    ... 

daran erinnert, dass

char* name = "Alina"; 
char input[100]; 

Schließlich hier sind Sie ein untersuchter Version des Codes:

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

int main() { 

    char* name = "Alina"; 
    char input[100]; 
    printf("What's your name?\n"); 
    scanf("%s", input); 
    if (strcmp(name, input) == 0) 
     printf("Your name is %s good job!\n", name); 
    else 
     printf("Are you sure? Open the program again and insert the correct name\n"); 

    return 0; 
} 

Die while(1) am Ende Ihres Codes ist absolut gefährlich, weil es eine Endlosschleife beginnt, die nie endet, stürzt Ihr Programm ab. Sie möchten es definitiv entfernen!

+0

Vielen Dank! es funktioniert endlich! über die while (1) - wenn ich es nicht mache, schließt es das programm sofort, aber wenn ich es schreibe dann bleibt das programm geöffnet, deshalb habe ich es getan, aber nochmal, vielen dank! –

+0

Markieren Sie die Antwort, damit andere wissen, dass es funktioniert –

+1

Die Endlosschleife stürzt das Programm nicht ab; Es verhindert nur, dass es beendet wird, und zwar so, dass die CPU weiter läuft. Viele Leute, die in einer IDE programmieren, wo das Programm in einem Terminalfenster ausgeführt wird und das Fenster verschwindet, wenn das Programm beendet wird, verwenden eine Variante von 'getchar()' - oft 'getch()' unter Windows - um auf eine Eingabe des Benutzers zu warten vor dem Beenden. –

1

Sie folgende Änderungen anwenden müssen:

char input[256]; 
scanf("%s", input); 
printf("your name is %s good job!\n ", name); 

zu Vergleichen Sie die Strings mit strcmp - schauen Sie sich die Dokumentation dieser Funktion an.

seien Sie vorsichtig mit scanf - denken Sie daran, wie lange Zeichenfolge Sie dort speichern können und was schief gehen kann. Werfen Sie einen Blick auf scanf_s

Verwandte Themen