2016-10-11 269 views
-1

我有一個家庭任務編寫一個程序,其中用戶輸入他的姓名和輸出應該是首字母縮寫。 問題是,應用這個程序我得到一個重複10次的首字母縮寫。停止for循環

我怎樣才能得到只有一對首字母的輸出?

我已經搜索了網站和這個網站,並試圖應用返回和中斷等事情,但它沒有幫助我。

下面是代碼:

#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

只是一個,但:拋出一個異常.. – Fusseldieb

+0

但首先格式化代碼:) –

+0

注意,你不應該修改這個問題是爲了使答案無效。你要求用戶輸入一些信息,然後完全忽略它。第一次完成內循環後,你可以用'return 0;'從main()退出,這可能不是你想要的。你可以避免在同一個字符串上重複調用'strlen()';那很好。你需要重新訪問這些代碼來清理你的邏輯 - 儘管如果你將修改後的代碼發佈到SO,它應該作爲這裏的補充,而不是替換它。 –

回答

1

你內心的循環永遠不會結束,因爲它的停止條件將永遠不會被達到。

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

你最有可能意味着

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

正如Varsha指出的那樣,你必須與外環同樣的問題了。看來你需要更新你的C知識循環:)

+0

感謝您的建議。我在代碼中改變了一些要點,但是我仍然得到了大約10次重複首字母縮寫的行。 –

+0

@IrynaRozhko:好的,然後再進行一些實際的調試。看來你不需要在那裏有任何循環。 –

2

這是因爲i和j被重新分配到0 個「for循環」結構應該是這樣的死循環: 爲(INIT;條件;增量) 請在程序中使用下面的「for循環」。

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

要得到名稱的首字母。以輸入(名稱)的字符串,找到字符串(length_of_input)的長度,並使用下面的代碼:

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

啊,外環呢! –

+0

我試過在最開始時這樣做,但在這種情況下,我沒有得到所需的輸出。輸出應該是輸入名稱的首字母。例如,如果我輸入Peter Williams,輸出應該是PW –