我必须写一个C程序,其中输出应该与输入相同,但删除了所有元音。除了我的程序不输出句子之间的换行符外,一切正常。我必须使用printf和scanf
输入:
Peter Piper picked a peck of pickled peppers.
A peck of pickled peppers Peter Piper picked.
If Peter Piper picked a peck of pickled peppers,
Where's the peck of pickled peppers Peter Piper picked?
Peter Piper picked a peck of pickled peppers.
If Peter Piper picked a peck of pickled peppers,
How many pickled peppers that Peter Piper picked?
我的程序输出:
Ptr Ppr pckd pck f pckld ppprs. pck f pckld ppprs Ptr Ppr pckd.f Ptr Ppr pckd pck f pckld ppprs,Whr's th pck f pckld ppprs Ptr Ppr pckd?Whr's th pck f pckld ppprs Ptr Ppr pckd?Whr's th pck f pckld ppprs Ptr Ppr pckd?Whr's th pck f pckld ppprs Ptr Ppr pck ...
它似乎没有打印出句子后面的n
。
这是我的代码:
void check_and_print_consonants(char string1[], char string2[]) {
int vowel = 0;
int str1_len = strlen(string1);
int str2_len = 10;
for (int i = 0; i < str1_len; i++) {
for (int j = 0; j < str2_len; j++) {
if (string1[i] == string2[j]) {
vowel = 1;
}
}
if(vowel == 0){
printf( "%c", string1[i]);
}
else{
vowel = 0;
}
}
}
int main(void) {
//collect input in an array
char input[128];
char vowels[] = {'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'};
while (scanf("%99[^n]%*c", input) != EOF){
check_and_print_consonants(input, vowels);
}
printf("n");
return 0;
}
我不知道我哪里错了。
scanf("%99[^n]%*c", input)
特别忽略换行符
scanf("%99[^n]%*c", input)
^^^^^^^^ . . . . . . read everything but a newline character
^^^ . . . . . ignore one character (the newline)
所以你需要在某些地方添加一个换行符。
按照建议,我将一个字符一个字符地读取输入,并在输入后立即打印,除非是元音。
// loop {
// get a char
// if it is not a vowel print it (includes printing newlines)
// }
为什么要逐行读取输入?你冒着用换行符出错的风险!!
#include <stdio.h>
int main()
{
int c;
while ((c = getchar()) != EOF) {
switch(c) {
case 'a': case 'e': case 'i': case 'o': case 'u':
case 'A': case 'E': case 'I': case 'O': case 'U':
continue; /* ignore */
}
putchar(c); /* output */
}
}
你可以简单地这样做:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char *input = "peter parkernpiper parkerneminem's rappern";
char vowels[] = {'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'};
for (int i = 0; input[i] != ' '; i += 1) {
for (int j = 0; vowels[j] != ' '; j += 1) {
if (input[i] == vowels[j]) {
i += 1;
break;
}
}
printf("%c", input[i]);
}
return 0;
}
- 第一个for循环在这里导航您的输入(第10行) 第二个for循环用于比较输入数组中的每个元音和每个字符(第11行)
- if语句是为了避免打印元音,它只绕过元音而不是n(第12行)
- break关键字是当你发现一个元音时停止第二个for循环(行(第14行)
您可以轻松添加scanf.
如果你需要帮助,尽管问我:)