2016-03-25 11 views
0

Ich versuche ein Programm zu erstellen, das einen Benutzer auffordert, seinen Namen einzugeben. Wenn er stattdessen die Nummer angibt, möchte ich, dass das Programm den Benutzer erneut abfragt, bis er Zeichen als Namen eingibt.Der Benutzer muss erneut abgefragt werden, wenn er Ziffern eingibt und keine Buchstaben

sollte es in etwa so aussehen:

char name[50]; 
printf("What is your name? "); 
scanf("%s", name); 
printf("Hello there, %s\n", name); 

In der vor allem gut ist, aber es nicht erkennt, wenn Sie Eingangsnummer Ziffern. Ich möchte den Benutzer in dem Fall wiederholen, wenn er Zahlen eingibt und nur Buchstaben akzeptiert

Ich habe den folgenden Code gemacht, aber offensichtlich funktioniert nicht. Ich würde deine Hilfe sehr schätzen. Erinnere dich einfach ... halte es einfach!

int main() 
{ 
    char name[50]; 

    int age, agenext, id, idnext = 0; 

    //PROMT USER TO INPUT NAME 

    printf("\nPlease enter your name:\n"); 
    scanf("%s", &name); 

     while (isdigit(name)) 

     { 
     printf("wrong input try again"); 

     } 
printf("Your name is %s ",name); 
return 0; 
+0

Willkommen bei Stackoverflow! Ich habe das C-Tag hinzugefügt. Wenn das nicht stimmt, bitte bearbeiten Sie es. Außerdem sollten Sie Ihre Frage so bearbeiten, dass sie genau angibt, was Ihr Problem ist. Ist das Problem, dass Sie versuchen, "isdigit" auf alle Elemente von 'name' anzuwenden? Beachten Sie auch, dass, wenn Sie die Bedingung behoben haben, Ihre "while" -Schleife für immer iterieren wird, da es keine Möglichkeit gibt, 'name' wieder einzugeben. – C8H10N4O2

+0

Auch ich sollte am Anfang in C sein, also muss die Lösung einfach sein das: char name [50] ... printf ("Wie heißt du?"); scanf ("% s", Name); printf ("Hallo da,% s \ n", Name); – VAPORAS

+0

beim Aufruf einer der 'scanf()' -Familien von Funktionen: 1) überprüfe immer den zurückgegebenen Wert (nicht den Parameterwert), um sicherzustellen, dass der Vorgang erfolgreich war. 2) Platziere ein führendes Leerzeichen in der Formatzeichenfolge, um jeden führenden Leerraum zu verbrauchen. 3) Verwenden Sie bei Verwendung des Formatbezeichners '% s' immer einen Modifikator für die maximale Länge, der um eins kleiner ist als die Eingabepufferlänge, um ein Überlaufen des Eingabepuffers durch den Benutzer zu vermeiden. Dies führt zu einem undefinierten Verhalten, das zu einem Segmentfehler führen kann . Anmerkung: 1 weniger, weil bei '% s', 'scanf()' immer ein NUL-Byte angehängt wird. – user3629249

Antwort

1

nur leicht modifiziert Code:

int has_digits(char * str) 
{ 
    for (; *str; str++) 
    { 
     if (isdigit(*str)) 
     { 
      return 1; 
     } 
    } 
    return 0; 
} 

int main() 
{ 
    char name[50]; 

    //PROMT USER TO INPUT NAME 

    printf("\nPlease enter your name:\n"); 
    scanf("%s", name); 
    while (has_digits(name)) 
    { 
     printf("wrong input try again\n"); 
     scanf("%s", name); 
    } 
    printf("Your name is %s\n", name); 
    return 0; 
} 
+0

vielen Dank. Könntest du erklären, warum ich falsch verstanden habe, wie ich iisdigit in meinem benutzt habe? – VAPORAS

+0

'isdigit' wird verwendet, um einzelne Zeichen zu prüfen, also müssen Sie jedes Zeichen in der Zeichenkette durchlaufen und die Funktion aufrufen, um zu sehen, ob irgendeine von ihnen eine Ziffer ist. Sie sollten sich auch die Probleme ansehen, die Sie unter Ihrer ursprünglichen Frage kommentiert haben, z. B. die Fehlerprüfung von scanf usw. –

Verwandte Themen