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

时间:2017-05-26 06:32:49

标签: c

我是新来的,看来这个网站是最好的建议地点 我的程序应该读取一个长度为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);
}

1 个答案:

答案 0 :(得分:3)

if(hold == 97 && hold == 101 && hold == 105 && hold == 111 && hold == 117)
{
    strcpy(stringtwo, string);

}

应该是

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';

注意OR而不是AND,并且不要使用像97这样的幻数,而是使用ASCII表示。

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

fgets(string, MAXSIZE, stdin);

for(i = 0; i < MAXSIZE; i++)

应该是

fgets(string, MAXSIZE, stdin);
size_t len = strlen(string);
for (i = 0; i < len; i++)

现在你可以比较

if (vowels == len)

而不是

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