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