[英]Why does my reversed char array print an extra line?
我試圖讓我的代碼除了輸入之外,然后在沒有任何額外行的情況下反轉並打印它。 我已經把所有的 \n 都拿出來看看是否有幫助,但我總是在打印之前換行。 我猜它在用戶輸入的末尾打印 null 字符,但我不知道如何擺脫它。
這是我到目前為止所擁有的
#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]);
}
}
看看這個 if 語句
if ((strcmp(str, "quit\n") == 0) || (strcmp(str, "q\n")==0) || (strcmp(str, "Quit\n")== 0)){
您會看到條件中使用的每個字符串文字都有新的換行符'\n'
。
表示字符數組str有這個字符,這個字符在輸出數組的function中以相反的順序輸出。
您可以通過以下方式將字符從數組中刪除,然后再將其傳遞給 function
str[ strcspn( str, "\n" ) ] = '\0';
或者甚至在 if 語句和 if 語句重寫之前這樣做
if ((strcmp(str, "quit") == 0) || (strcmp(str, "q")==0) || (strcmp(str, "Quit")== 0)){
注意 main 的遞歸調用沒有多大意義。
return main();
您可以將 main 中的代碼包含在一個循環中。
function 本身應至少按以下方式聲明和定義
void revStr( const char str[] )
{
size_t arrSz = strlen( str );
while ( arrSz-- ) putchar( str[arrSz] );
}
這是一個演示程序
#include <stdio.h>
#include <string.h>
void revStr( const char str[] )
{
size_t arrSz = strlen( str );
while ( arrSz-- ) putchar( str[arrSz] );
}
int main(void)
{
revStr( "Hello World!" );
return 0;
}
它的 output 是
!dlroW olleH
它與字符串末尾的 null 字符沒有任何關系。 從終端使用程序時,它似乎包含兩個換行符,例如:
abc
cba
出現第一個換行符是因為控制台正在打印您鍵入“abc[enter]”的所有內容。
出現第二個換行符是因為fgets()
返回包含換行符的字符串,例如“abc\n”。 您的revStr()
function 然后以相反的順序打印字符串,首先是換行符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.