为什么我的反向字符数组打印额外的一行?

问题描述 投票:0回答:1

我正在尝试将我的代码输入到除了输入之外的所有内容,然后反转并打印它,而没有多余的行。我已经将所有\ n取出来看看是否有帮助,但是我总是在打印前换行。我猜想它在用户输入的末尾打印空字符,但是我不知道如何摆脱它。

这是我到目前为止所拥有的

    #include <stdio.h> 
    #include <string.h> 

    void revStr(char str[]);

    int main(void) { 
    char str[50]; 
    fgets(str, 50, stdin);

if ((strcmp(str, "quit\n") == 0) || (strcmp(str, "q\n")==0) || (strcmp(str, "Quit\n")== 0)){
  printf("\n");
  return 0;
}
else{
  revStr(str);
  return main();
}  
 } 
 void revStr(char str[])
 {
 int arrSz = strlen(str); 

 int i; 
 for(i = arrSz-1; i >= 0; i--){
 if(str[i] != '\0')
printf("%c",str[i]);

} 
}
c arrays char reverse
1个回答
0
投票

查看此if语句

if ((strcmp(str, "quit\n") == 0) || (strcmp(str, "q\n")==0) || (strcmp(str, "Quit\n")== 0)){

您会发现该条件中使用的每个字符串文字都具有换行符'\n'

这意味着字符数组str具有此字符,并且此字符在以相反顺序输出数组的函数中输出。

您可以通过以下方式将字符从数组中删除,然后再将其传递给函数

str[ strcspn( str, "\n" ) ] = '\0';
© www.soinside.com 2019 - 2024. All rights reserved.