[英]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.