2016-10-11 4 views
-1

Ich habe eine Home-Aufgabe, die ein Programm schreibt, in dem der Benutzer seinen Vor- und Nachnamen eingibt und der Ausgang die Initialen sein soll. Das Problem ist, dass die Anwendung dieses Programms bekomme ich eine Reihe von Initialen, die 10 mal wiederholt werden.Stoppen einer for-Schleife

Wie kann ich die Ausgabe von nur einem Paar Initialen erhalten?

Ich habe bereits das Internet und diese Website durchsucht und versucht, Dinge wie Rückkehr und Pause anzuwenden, aber es hat mir nicht geholfen. Hier

ist der Code:

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

int main (int argc, string argv[]) 
{ 
    // get string of the text 
    string s = GetString(); 

    // output the initials of the name 
    if (s != NULL) 
     for (int i = 0; i < argc; i++) // was for (…; i = 0) 
     { 
      for (int j = 0, n = strlen(argv[i]); j < n; j++) // was for (…; j = 0) 
      { 
       printf ("%c%c", argv[1][0], argv[2][0]); 
      } 
      return 0; 
     } 
} 
+0

Nur wenn: Werfen Sie eine Ausnahme .. – Fusseldieb

+0

Aber zuerst den Code formatiert :) –

+0

Beachten Sie, dass Sie nicht ändern sollten die Frage, um die Antworten zu entwerten. Sie fragen den Benutzer nach einer Eingabe und ignorieren sie dann vollständig. Sie verlassen 'main()' mit 'return 0;', nachdem Sie zum ersten Mal die innere Schleife abgeschlossen haben, was unwahrscheinlich ist, was Sie wollten. Sie vermeiden es, 'strlen()' wiederholt in derselben Zeichenfolge aufzurufen; das ist gut. Sie müssen diesen Code erneut aufrufen, um Ihre Logik zu bereinigen - obwohl Sie, wenn Sie den überarbeiteten Code an SO senden, ihn als Ergänzung zu dem, was hier ist, hinzufügen sollten, anstatt ihn zu ersetzen. –

Antwort

1

Ihre innere Schleife nie beendet, weil seine Stoppbedingung nie erreicht wird.

for (int j = 0, n = strlen(argv[i]); j < n; j = 0) 

Sie höchstwahrscheinlich

gemeint
for(int j = 0, n = strlen(argv[i]); j < n; j++) 

Wie Varsha wies darauf hin, Sie haben das gleiche Problem mit der äußeren Schleife zu. Es scheint, dass Sie Ihr Wissen über C auffrischen müssen Schleifen :)

+0

Danke für den Hinweis. Ich habe einige Punkte im Code geändert, aber immer noch die Zeile, in der die Initialen etwa 10 Mal wiederholt werden. –

+0

@ IrynaRozhko: Nun, Zeit für ein echtes Debuggen dann. Es scheint, dass du dort keine Schleifen brauchst. –

2

Dies ist Endlosschleife als i und j auf 0 „for-Schleife“ sein sollte Struktur neu zugewiesen werden: für (init; Bedingung; Zuwachs) verwenden Sie bitte unten "for loop" in Ihrem Programm.

for (int i = 0; i < argc; i++) 
{ 
    for (int j = 0, n = strlen(argv[i]); j < n; j++) 

Initialen des Namens zu erhalten. Nehmen Eingang (Name) als String und finden Sie die Länge der Zeichenfolge (length_of_input) und Code unten verwenden:

for(int i=0; i< (length_of_input-1); i++){ 
//First letter is always initial 
    if(i==0){ 
     // print character at i position 
     printf ("%c",name[i]); 
    } 
    //if there is space, then next character is initial 
    if(name[i] == ' '){ 
     printf ("%c",name[i+1]); //print next character 
    } 
} 
+0

Ah, die äußere Schleife auch! –

+0

Ich habe versucht, es am Anfang zu tun, aber in diesem Fall bekomme ich nicht die gewünschte Ausgabe. Die Ausgabe sollte die Initialen des eingegebenen Namens sein. Zum Beispiel, wenn ich Peter Williams eingeben, sollte die Ausgabe PW sein –