C 检查字符串中的数字字母的步骤

C 检查字符串中的数字字母的步骤,c,C,当我执行这个程序时,k值应该像0,1,2,3,但是它显示了k的一些随机值。 在执行for循环后,“i”的值不会更改。如果“i”的初始值为0。在执行for循环100次之后,“i”的值仍然是0 输入-asd 输出-1234567891011213 #include<stdio.h> #include<ctype.h> int main() { int i,k=0; char array[100]; scanf("%s",&array);

当我执行这个程序时,k值应该像0,1,2,3,但是它显示了k的一些随机值。 在执行for循环后,“i”的值不会更改。如果“i”的初始值为0。在执行for循环100次之后,“i”的值仍然是0

输入-asd

输出-1234567891011213

#include<stdio.h>
#include<ctype.h>

int main()
{
    int i,k=0;
    char array[100];
    scanf("%s",&array);

    for(i=0;i<=99;i++)
    {
        if(array[i]>='a'&&array[i]<='z')
        {
            k=k+1;
            printf("%d",k);
        }
    }
}

以下方法可能有效

#include<stdio.h>
#include<ctype.h>
int main()
{
    int i,k=0;
    char array[100];

    scanf("%s", array);
    for(i=0;array[i] != '\0';i++)
    {
        if(array[i]>='a'&&array[i]<='z')
        {
            k=k+1;
            printf("%d",k);
        }
    }

   return 0; 
}
不要使用到99的for循环。您只希望继续到输入字符串的末尾,即直到找到零终止

永远不要扫描%s,数组;因为输入的长度没有限制。用户可以通过键入大于100的字符串使数组溢出

对于问题1,可以使用while;对于问题2,可以使用fgets,因为它允许您指定最大字符数

然后,您的代码可能如下所示:

#include<stdio.h>
#include<ctype.h>

int main()
{
    int i=0,k=0;
    char array[100];
    fgets(array, sizeof(array), stdin);
    while(array[i])
    {
        if(array[i]>='a' && array[i]<='z')
        {
            k=k+1;
            printf("%d",k);
        }
        i = i +1;
    }
    printf("\n");
}

从数组中删除引用符号这并不重要,但您应该在循环中声明i,就像int i=0。。。。。你应该缩进你的代码。显示一些随机值它们不是随机值-它是1 2 3 4 5 6 7 8 9 10 11 12 13。记住这一点,您应该能够找出哪里出错在重要数据之后打印换行符:printf%d\n,k;