我的代码有什么问题吗??

#include
#include
main()
{ char a[100];
char b[100];
char c[500];
int i,k,u,n,x;
for(i=0;i<26;i++)
b[i]+='a'+i;
gets(a);
k=strlen(a);
x=0;
n=0;
for(i=0;i
{for(u=0;u<26;u++)
if(a[i]!=b[u])
x++;
if(x==26)
{c[n]=a[i];
n++;
}
}
printf("%c",c);
}

你x忘记了归零,到这里归零就好了

img


当然 我也有更好的代码

#include<stdio.h>
#include<string.h>
int main() {
    char a[100] = {0};
    char b[100] = {0};
    // 输入
    gets(a);
    // 获取输入长度
    int k = strlen(a);
    int j = 0 ;
    // 在字符长度内 包括 '\0' 结尾符 遍历
    for( int i = 0 ; i <= k ; i++ ){
        // 如果是小写啥都不干
        if( a[i] <= 'z' && a[i] >= 'a' ){
            
        } else {
            // 不是小写就复制到 b
            b[j] = a[i];
            // b的长度 +1 
            j++;
        }
    }
    printf("%s", b);
}

只输出一个字符的bug需要这样改:思路看注释吧:

#include<stdio.h>   
#include<string.h>
//main返回值类型默认给个int
int main()
{  char a[100];
   char b[100];
   char c[500];
   int i,k,u,n,x;
   for(i=0;i<26;i++)
    b[i]='a'+i;
   
   gets(a);
   k=strlen(a);
   
   n=0;
   for(i=0;i<k;i++)
    {
    x=0;//解决你原来只显示一个字母的bug,处理完第一个输入字符,你不在这里清零,第二个字符的时候 x跑飞了你也没机会==26了,自然c变量就存不到第二个字符了。
    for(u=0;u<26;u++)
      if(a[i]!=b[u]) 
       x++;
      if(x==26)
        {c[n]=a[i];
         n++;
        }  
    }
    
    //打印字符串要用%s
    printf("%s",c);
    //表示main方法正常终止。
    return(0);
    
}

(1)b[i] += 'a' + i; 这里,b数组没有初始化,直接用 b[i] = 'a' + i; 就可以了
(2)c是数组,输出的时候printf中的%c改成 %s,数组没有正确结尾,char c[500]这里改成 char c[500]={0};
(3)for循环里,需要重置x,在外层for循环中添加一句 x = 0.
完整代码如下(修改部分有注释):

 
#include<stdio.h>
#include<string.h>
int main()
{
    char a[100];
    char b[100];
    char c[500]={0};
    int i, k, u, n, x;
    for (i = 0; i < 26; i++)
        b[i] = 'a' + i;   // += 改成 =
    gets(a);
    k = strlen(a);
    x = 0;
    n = 0;
    for (i = 0; i < k; i++)
    {
        x = 0;   //这里重置x
        for (u = 0; u < 26; u++)
            if (a[i] != b[u])
                x++;
        if (x == 26)
        {
            c[n] = a[i];
            n++;
        }
    }
    printf("%s", c);  //%c改成%s
}

最后的printf("%c",c)里面的c 只是一个数组名,c[0]或者把%c改为%s才可以正常输出


#include<stdio.h>   
#include<string.h>
main()
{  char a[100];
   char b[100];
   char c[500];
   int i,k,u,n,x;
   for(i=0;i<26;i++)
    b[i]+='a'+i;
   gets(a);
   k=strlen(a);
   x=0;
   n=0;
   for(i=0;i<k;i++)
    {for(u=0;u<26;u++)
      if(a[i]!=b[u]) 
       x++;
      if(x==26)
        {c[n]=a[i];
         n++;
        }  
    }
    printf("%c",c);
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632