C 在不中断语句的情况下退出循环?

C 在不中断语句的情况下退出循环?,c,arrays,loops,multidimensional-array,C,Arrays,Loops,Multidimensional Array,对于家庭作业,我需要提示用户输入单词,直到他们输入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 'd

对于家庭作业,我需要提示用户输入单词,直到他们输入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 */
int-wordentry(int行、int列、字符a[20][100])
{
int i=0;/*计数器*/
printf(“输入您希望隐藏在拼图中的20个单词,或在完成时键入‘完成’:\n”);
/*当用户没有输入20个单词,或者用户没有输入单词“完成”时,输入单词的提示会不断循环*/
而(i<20)
{
scanf(“%c”,a[i]);
if(strcmp(a[i],“done”)==0)
{
回报(i);
}
i++;
}/*循环时结束*/
回报(i);
}/*末端功能*/

变量
row
是用户确定的变量,它是每个单词要插入的单词搜索拼图的行长度,变量
col
是用户确定的每列长度。数组
a
是将每个单词存储为字符串的位置。返回变量
i
用于跟踪用户输入的字数。另外,除非有
switch
语句,否则我不能使用任何
break
语句。我很沮丧,因为我不知道怎么做才对。有人能帮忙吗?

要在不使用
break
语句的情况下退出循环,您需要满足保持循环运行的条件。因此,当您有以下情况时:

while (i < 20)
while(i<20)

i
设置为20或更大将阻止循环再次执行。一个区别是它将继续到当前运行的末尾,而不是立即退出。

要在不使用
break
语句的情况下退出循环,需要满足保持循环运行的条件。因此,当您有以下情况时:

while (i < 20)
while(i<20)

i
设置为20或更大将阻止循环再次执行。一个区别是,它将继续到当前运行结束,而不是立即退出。

扫描程序只读取一个字符,这是
%c
所指示的。因此,比较是将“d”与“done”进行比较,两者并不相等。使用
%s
输入整个单词,然后继续调试问题

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

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

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)

我认为if语句中的strcmp总是返回false。我对C编程语言没有很好的经验,但是试着用这样的语言

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

(别忘了包括string.h)

避免冗余和硬编码值,任何改变控制流的条件都值得显式显示,因此避免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 */
#定义MAXWORDS 20
#定义MAXCHARS 99
int-wordEntry(int行、int列、字符字[MAXWORDS][MAXCHARS+1])
{
int numEntered=0;
int userDone=0;
char*doneWord=“完成”;
printf(“输入要隐藏在拼图中的%d个单词,或在完成时键入“%s:\n”,MAXWORDS,doneWord);
/*当用户没有输入max words,或者用户没有输入单词“done”时,输入单词的提示会不断循环*/
而(!userDone&&(numEntered

在决定使用scanf()之前,请阅读。

避免冗余和硬编码值,任何更改控制流的条件都值得显式显示,因此避免转到、继续和中断(在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 */
#定义MAXWORDS 20
#定义MAXCHARS 99
int-wordEntry(int行、int列、字符字[MAXWORDS][MAXCHARS+1])
{
int numEntered=0;
int userDone=0;
char*doneWord=“完成”;
printf(“输入要隐藏在拼图中的%d个单词,或在完成时键入“%s:\n”,MAXWORDS,doneWord);
/*当用户没有输入max words,或者用户没有输入单词“done”时,输入单词的提示会不断循环*/
而(!userDone&&(numEntered

在决定使用scanf()之前也要阅读。

很好的改进!妮特:
doneWord
可能是
char const*const
。很好的改进!Nit:
doneWord
可以是
char const*const
。建议
如果(scanf(“%99s”,a[i])!=1)以某种方式处理错误()建议
如果(scanf(“%99s”,a[i])!=1)以某种方式处理错误()