C为什么for循环没有迭代它应该迭代的次数?

wvt8vs2t  于 2023-01-20  发布在  其他
关注(0)|答案(1)|浏览(165)

我试着问K数量的单词添加到一个矩阵中。我有2个问题:
1.我试图设定strlen(字符串)必须小于n(矩阵大小)的条件,但是当它进入do while循环时,它永远不会退出。
1.我怎样才能让for循环重复直到输入了k个单词?
几天前我已经试过了,做的时候效果很好。直到我改变了一些东西,它变得很乱。

/* Enter the matrix dimension */
int n;
do{
    printf("\nEnter the matrix size");
    scanf("%d", &n);
}while(2>n);

/* Ask for the amount of words the user will enter */
int k;
do{
    printf("\nInsert how many words you will enter:");
    scanf("%d", &k);
}while(k<0);

/* k Words loop */
int amountOfWords=0;
char string[20];
int i;
for(i=0; i<k; i++, amountOfWords++)
    {
    do  {
        printf("\nEnter the %d word:\n", amountOfWords+1);
        scanf("%s", &string);
        }while(strlen(string) > n);
    }
0qx6xfy6

0qx6xfy61#

当前代码的问题在于,在do-while循环中,变量amountOfWords永远不会递增,因此循环strlen(string)〉n的条件始终为真。
以下是解决此问题的一种方法:

int amountOfWords=0;
char string[20];
for(int i=0; i<k; i++)
{
    do  {
        printf("\nEnter the %d word:\n", i+1);
        scanf("%s", string);
    }while(strlen(string) > n);
    amountOfWords++;
}

这样,如果用户输入的单词长度超过最大大小(n),则循环将再次询问单词,直到输入有效单词为止,并且变量amountOfWords将在输入有效单词之后递增。
另一种方法是使用while循环,如下所示:

int amountOfWords=0;
char string[20];
int i=0;
while(amountOfWords<k)
    {
    printf("\nEnter the %d word:\n", amountOfWords+1);
    scanf("%s", string);
    if(strlen(string) <= n) 
        {
        amountOfWords++;
        }
    }

以此方式,循环将保持运行,直到amountOfWords达到期望的单词量(k)。

相关问题