我是C的新手所以请原谅我的误会。我正在尝试编写一个简单的程序,它接受用户字符输入,改变它,然后在“piglatin”中打印出来......其中一个单词的第一个字母移到单词的末尾,然后是“ay”被附加在单词的末尾。例 - > “喜欢”这个词变成了......“ikelay”。这是我的计划......
//pig latin
#include <stdio.h>
#define MAX 1000
void pigify(char chars[], int cnt);
void sortWords(char stream[], int total);
void clearWord(char word[], int j);
int main(){
int c, i;
char allChars[MAX];
i = 0;
while((c = getchar()) != EOF){
allChars[i] = c;
++i;
}
allChars[i] = '\0';
sortWords(allChars, i);
return 0;
}
/////////////////
/////////////////
void sortWords(char stream[], int total){
int i, j, start, end, m;
char words[total];
clearWord(words, total);
i = j = end = m = 0;
while(stream[i] != '\0'){
if(stream[i] != '\n' && stream[i] != '\t' && stream[i] != ' '){
++i;
++j;
} else if (j > 2){
end = i;
for(start = i-j; start <= end; ++start){
words[m] = stream[start];
++m;
}
pigify(words, m);
clearWord(words, m);
j = m = 0;
}
}
}
/////////////////
/////////////////
void clearWord(char word[], int i){
int j;
for (j = 0; j <= i; ++j){
word[j] = '\0';
}
}
/////////////////
/////////////////
void pigify(char alls[], int cnt){
int j;
char pchars[cnt+3];
j = 0;
while(alls[j] != '\0'){
pchars[j] = alls[j];
++j;
}
if(alls[0] != 'a' && alls[0] != 'e' && alls[0] != 'i' && alls[0] != 'o' && alls[0] != 'u'){
pchars[cnt] = alls[0];
pchars[cnt+1] = 'a';
pchars[cnt+2] = 'y';
pchars[cnt+3] = '\0';
pchars[0] = ' ';
}
printf("\npost pigification --> %s\n", pchars);
}
我已经待了很长时间了,我无法找到我犯了错误的地方。我不太关心这个程序,我不需要将输入转换为“piglatin”,但我真的很想知道我做错了什么!帮助,建议和/或指针会很棒!谢谢
答案 0 :(得分:1)
编写外部数组边界。使用<
char words[total];
clearWord(words, total);
void clearWord(char word[], int i){
int j;
// for (j = 0; j <= i; ++j){
for (j = 0; j < i; ++j){
word[j] = '\0';
}
}
也可能有其他问题
答案 1 :(得分:0)
替换此行:
while((c = getchar()) != EOF){
allChars[i] = c;
++i;
}
有了这个:
while ((allChars[i] = getchar()) != '\n')
i++;
否则,每次按Enter键,循环都会重新开始。也许其他人可以解释一下,但上面的代码会让你的代码做你想要的。
将来,fgets()
这样的功能可能更适合您的需求,因为您不必担心检查EOF等等 - 您只需要在最后删除换行符那种情况。
答案 2 :(得分:0)
使用帮助形式@chux并在使用一些更多的print语句来查明发生了什么之后,我意识到在函数sortWords
中,变量i
没有针对其中的情况递增void sortWords(char stream[], int total){
int i, j, start, end, m;
char words[total];
clearWord(words, total);
i = j = end = m = 0;
while(stream[i] != '\0'){
if(stream[i] != '\n' && stream[i] != '\t' && stream[i] != ' '){
++i;
++j;
} else if (j > 2){
end = i;
for(start = i-j; start <= end; ++start){
words[m] = stream[start];
++m;
}
pigify(words, m);
clearWord(words, m);
j = m = 0;
++i;
}
}
}
一个空间&#39;&#39; &#39;&#39;字符或新的行或标签字符&#39; \ n&#39;&#39;和&#39; \ t&#39;&#39;达成了。将功能更改为此后...
Q_DECLARE_OPERATORS_FOR_FLAGS
该计划至少可以按预期运作。我打算用这个问题解决的错误至少是固定的。仍然不完美,但我认为这对我来说是个问题很少,应该结束