初学者C语言:while循环中的条件问题...相同逻辑不同的结果

时间:2017-12-02 03:35:16

标签: c

我的代码应删除我提供的字符串中的所有元音。但如果元音是字符串的最后一个字符,它不会删除。

#include <stdio.h> #include <string.h> int main() { int i=0; char str[100]; printf("Enter a string :\n"); gets(str); int len=strlen(str); while(str[i]!='\0') { printf("%c",str[i]); if(str[i]=='A'||str[i]=='a'||str[i]=='E'||str[i]=='e'||str[i]=='I'||str[i]=='i'||str[i]=='O'||str[i]=='o'||str[i]=='U'||str[i]=='u') printf("\b"); i++; } return 0; }

就像我提供字符串Hello它打印Hllo它应该打印Hll ...但是如果我将while条件更改为(i

2 个答案:

答案 0 :(得分:2)

我猜打印\ b不会做你想象的那样。它不会删除最后打印的字符,它只打印一个额外的“退格”字符,在某些输出设备(如控制台)上向后移动一个字符。 (然后, next 字符将覆盖您想要'删除'的字符。)

不要那样做。相反,移动'if'语句,以便您不首先打印这些元音!

答案 1 :(得分:0)

你可以试试这个

#include <stdio.h>
#include <string.h>
int main()
{
int i=0;
char str[100];
printf("Enter a string :\n");
fgets(str,100, stdin);
int len=strlen(str);
while(str[i]!='\0')
{

if(str[i]=='A'||str[i]=='a'||str[i]=='E'||str[i]=='e'||str[i]=='I'||str[i]=='i'||str[i]=='O'||str[i]=='o'||str[i]=='U'||str[i]=='u'){
    continue;
}else{
     printf("%c",str[i]);
}
    i++;
}
return 0;

}