C初级编码器,程序输出垃圾值

C初级编码器,程序输出垃圾值,c,C,我是新来的,这里似乎是最好的咨询场所。 我的程序应该读取30个字符长的字符串。然后程序应按顺序将该字符串中的字符复制到第二个字符数组中, 但仅当字符是元音(a、e、i、o、u)时 我现在有点不知所措。任何帮助都将不胜感激 程序打印随机字符行。 这行是30长,就像我想要的,但输出是随机垃圾 #include <stdio.h> const int MAXSIZE = 31; int main() { char stringtwo[31]; int i; i

我是新来的,这里似乎是最好的咨询场所。
我的程序应该读取30个字符长的字符串。然后程序应按顺序将该字符串中的字符复制到第二个字符数组中,
但仅当字符是元音(a、e、i、o、u)时

我现在有点不知所措。任何帮助都将不胜感激

程序打印随机字符行。
这行是30长,就像我想要的,但输出是随机垃圾

#include <stdio.h>

const int MAXSIZE = 31;

int main()
{
    char stringtwo[31]; 
    int i;
    int hold;
    char string[31] = {'\0'};

    printf("Enter message, upto 30 characters!\n");
    fgets(string, MAXSIZE, stdin);

    for(i = 0; i < MAXSIZE; i++)
    {
        hold = (int) string[i];

        if(hold == 97 && hold == 101 && hold == 105 && hold == 111 && hold == 117)
        {
            strcpy(stringtwo, string);
        }
    }
    /* Test to see if any vowels */
    if(strcmp(string, stringtwo) == 0)
    {
        printf("Strings are the same. \n");
    }

    for(i = 0; i < MAXSIZE; i++)
    {
        printf("%c\n", stringtwo[i]);
    }

    return(0);
}
#包括
常量int MAXSIZE=31;
int main()
{
两个[31];
int i;
int hold;
字符字符串[31]={'\0'};
printf(“输入消息,最多30个字符!\n”);
fgets(字符串、最大尺寸、标准尺寸);
对于(i=0;i
应该是

size_t vowels = 0;
/* Loop ... */
if (hold == 'a' || hold == 'e' || hold == 'i' || hold == 'o' || hold == 'u')
{
    stringtwo[vowels] = string[i];
    vowels++;
}
/* End loop ... */
stringtwo[vowels] = '\0';
fgets(string, MAXSIZE, stdin);
size_t len = strlen(string);
for (i = 0; i < len; i++)
请注意或而不是AND,不要使用像
97
这样的幻数,而是使用ASCII表示法

此外,您不需要在循环中迭代
MAXSIZE

fgets(string, MAXSIZE, stdin);

for(i = 0; i < MAXSIZE; i++)
而不是

if(strcmp(string, stringtwo) == 0)
应该是

size_t vowels = 0;
/* Loop ... */
if (hold == 'a' || hold == 'e' || hold == 'i' || hold == 'o' || hold == 'u')
{
    stringtwo[vowels] = string[i];
    vowels++;
}
/* End loop ... */
stringtwo[vowels] = '\0';
fgets(string, MAXSIZE, stdin);
size_t len = strlen(string);
for (i = 0; i < len; i++)
请注意或而不是AND,不要使用像
97
这样的幻数,而是使用ASCII表示法

此外,您不需要在循环中迭代
MAXSIZE

fgets(string, MAXSIZE, stdin);

for(i = 0; i < MAXSIZE; i++)
而不是

if(strcmp(string, stringtwo) == 0)

string
长度应为32,以包含用于终止字符串的null。
strcpy(stringtwo,string)-->
stringtwo[i]=字符串[i]
@LiranFunaro emmm…为什么?
if(hold==97&&hold==101&&hold==105&&hold==111&&hold==117)
在数学上是错误的。@SouravGhosh他在数组中最后一个元素为30的31处放置null。
字符串的长度应为32,以包含null来终止字符串。
strcpy(stringtwo,string)-->
stringtwo[i]=字符串[i]
@LiranFunaro emmm…为什么?
如果(hold==97&&hold==101&&hold==105&&hold==111&&hold==117)
在数学上是错误的。@SouravGhosh他在数组中最后一个元素为30的31处设置了null。
strcpy()
?当然可以?@SouravGhosh,没有;)令人惊叹的!非常感谢,你们真的是最好的!这意味着很多!我知道尝试转换为ASCII是愚蠢的,我现在真正理解了如何使用char数据类型:D
strcpy()
?当然可以?@SouravGhosh,没有;)令人惊叹的!非常感谢,你们真的是最好的!这意味着很多!我知道尝试转换为ASCII是愚蠢的,我现在真正理解了如何使用char数据类型:D