簡體   English   中英

退出循環而沒有break語句?

[英]Exiting a loop without break statement?

對於家庭作業,我需要提示用戶輸入單詞,直到他們輸入20個單詞或鍵入單詞“ done”為止。 現在,我有一個帶有while循環的函數,該函數可以掃描輸入的每個單詞,但是當用戶鍵入“ done”時,循環不會結束。

功能:

int wordentry(int row, int col, char a[20][100])

{

int i = 0;/* Counter */


    printf("Enter 20 words you would like hidden in the puzzle, or type 'done' when finished:\n");

    /* While the user hasn't entered 20 words, or the user hasn't entered the word 'done' the prompt to enter words keeps looping */

    while(i < 20)
    {
      scanf("%c",a[i]);
      if(strcmp(a[i],"done") == 0)
      {
        return(i);
      }
      i++;

    }/* Ends while loop */



return(i);

}/* Ends function */

變量row是用戶確定的變量,它是每個單詞都插入其中的單詞搜索難題的行長,變量col是用戶確定的每列的長度。 數組a是每個單詞存儲為字符串的位置。 返回變量i旨在跟蹤用戶輸入的單詞數。 另外,除非有switch語句,否則我不能使用任何break語句。 我感到沮喪,因為我不知道該怎么做。 有人可以幫忙嗎?

scanf僅讀取%c指示的單個字符。 因此,比較是將“ d”與“ done”進行比較,這將不相等。 使用%s以便輸入完整的單詞,然后繼續調試問題。

  scanf("%s",a[i]);

  if(strcmp(a[i],"done") == 0)
  ... 

我認為if語句中的strcmp總是返回false。 我對C編程語言沒有很好的經驗,但是請嘗試這樣寫

...
scanf("%s",&a[0]);
if(strcmp(a[i],"done") == 0)
...

(不要忘了包含string.h)

要在沒有break語句的情況下退出循環,您需要滿足保持循環運行的條件。 因此,當您具有以下條件時:

while (i < 20)

i設置為20或更大將阻止循環再次執行。 一個區別是它將繼續當前運行的結束,而不是立即退出。

避免冗余和硬編碼的值,任何可以改變控制流程的條件都應明確指出,因此請避免執行goto,continue和break(在switch語句中除外),並且字符便宜,因此請為變量賦予一些有意義的名稱:

#define MAXWORDS 20
#define MAXCHARS 99

int wordEntry(int row, int col, char words[MAXWORDS][MAXCHARS+1])
{

    int numEntered = 0;
    int userDone = 0;
    char *doneWord = "done";

    printf("Enter %d words you would like hidden in the puzzle, or type '%s' when finished:\n", MAXWORDS, doneWord);

    /* While the user hasn't entered max words, or the user hasn't entered the word 'done' the prompt to enter words keeps looping */

    while( !userDone && (numEntered < MAXWORDS) )
    {
        scanf("%s",words[numEntered]);
        if (strcmp(words[numEntered],doneWord) == 0)
        {
            userDone = 1;
        }
        else
        {
            numEntered++;
        }

    }/* Ends while loop */

    return numEntered;

}/* Ends function */

在決定使用scanf()之前,還請閱讀http://c-faq.com/stdio/scanfprobs.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM