2015-08-15 27 views
-2
#include <stdio.h> 
#include <ctype.h> /* for access to the toupper function */ 

void reverse_name(char *name); 


int main(void) 
{ 
    char input[100]; 

    printf("Enter a first and last name: "); 
    gets(input); 
    reverse_name(input); 
    return 0; 
} 

void reverse_name(char *name){ 
    char *first = name; 
    char *see; 
    see = name; 
    while(*see != ' '){ 
    } 
    while(*see != '\n'){ 
     putchar(*see); 
    } 
    printf(", %c",*first); 
} 

我希望這種情況發生:輸入姓氏和名字:勞埃德·福斯迪克字交換過程中無輸出

和輸出是這樣的:福斯迪克L.

但是進入第一後和姓氏,勞埃德Fosdick,該計劃沒有給出任何答案,什麼都沒有發生?代碼有什麼問題?

+1

而(*參見='「!){} 這是你的第一個問題.. 第二,而被你的第二個問題.. – Alon

+1

阿龍說什麼:中'while'循環條件將從不改變。如果第一個字符不是空格,則會出現無限循環。你可以這樣做:while(* see!='')see ++;',但如果它不包含空格,你可能會在字符串末尾讀取。 –

+1

是否真的沒有更多的描述性標題出現在你的腦海裏 - 比「我的代碼有什麼問題」_? – Michael

回答

2

你既不增加也不see檢查0終止在這兩個你而循環:

while(*see && *see != ' '){ 
    see++; 
} 

while(*see && *see != '\n'){ 
    putchar(*see); 
    see++; 
} 

gets()已經從C11刪除,你不應該使用它,即使你是以下舊的標準。改爲使用fgets()

這絕不是一個完整的解決方案。你將不得不問自己:

  • 如果輸入名稱之間包含多個空格,該怎麼辦?
  • 如果輸入包含兩個以上的名字,該怎麼辦?
  • 如果有沒有會叫什麼名字?

你需要考慮所有這些情況,並在代碼中處理它們。

0

你有一個無限循環

while(*see != ' '){} 

你需要增加你的指針位置。

0

我認爲這是更好的代碼

得到函數已不再

您閱讀的格式代碼。他們是firstName和secondName之間的空格。

沒有無限循環根本沒有循環。

int main(void) 
{ 
    char firstName[100]; 
    char secName[100]; 
    printf("Enter a first and last name: "); 
    scanf("%s %s",firstName,secName); 
    printf("%s ,%c",secName,firstName[0]); 
    return 0; 
}