用换行符打印段落



我必须写一个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.

如果你需要帮助,尽管问我:)

相关内容

  • 没有找到相关文章

最新更新