2013-06-19 21 views
0

我試圖完成一個C++練習,你必須完成一個'Golf'函數的函數定義並設計一個基於此的程序,但是我遇到了其中一個函數的問題。C++中的多重return語句

函數的部分目標是希望在用戶輸入高爾夫球員名稱時返回1,如果沒有輸入名稱,則返回0。

我遇到了一些困難,因爲當我運行該程序時,我總是得到1返回到主。

底下我已經列出了我迄今所做的每個文件:

golf.h

#ifndef GOLF_H 
#define GOLF_H 

const int Len = 40; 

struct golf { 
    char fullname[Len]; 
    int handicap; 
}; 

void setgolf(golf &g, const char *name, int hc); 
int setgolf(golf &g); 
void handicap(golf &g, int hc); 
void showgolf(const golf &g); 

#endif /* GOLF_H */ 

golf.cpp

#include "golf.h" 
#include "iostream" 

void setgolf(golf &g, const char *name, int hc) { 


    strcpy(g.fullname, name); 
    g.handicap = hc; 

} 

int setgolf(golf &g) { 


    std::cout << "Golfer's name:"; 
    std::cin.getline(g.fullname, Len); 
    if (std::cin.get() == '\0') 
     return 0; 


    std::cout << "Golfer's handicap: "; 
    std::cin >> g.handicap; 


    return 1; 

} 

void handicap(golf &g, int hc) { 
    g.handicap = hc; 
    std::cout << g.fullname << "'s new handicap is:" << g.handicap; 

} 

void showgolf(const golf &g) { 

    std::cout << "Player's Name:" << g.fullname << std::endl; 
    std::cout << "Player's handicapped:" << g.handicap << std::endl; 

} 

的main.cpp

#include <cstdlib> 
#include <iostream> 
#include "golf.h" 

using namespace std; 

int main(int argc, char** argv) { 
    int retuVal = 0; 

    golf ann; 
    setgolf(ann, "Ann Birdfree", 24); 
    showgolf(ann); 
    cout << "\n"; 


    golf peter; 
    retuVal = setgolf(peter); 
    cout<<"return value is:"<<retuVal<<endl; 


    cout << "\nGolf details reset in new handicap\n"; 
    handicap(peter, 5); 

    cout << "\nDetails reprinted"; 
    showgolf(peter); 

return 0; 
} 

請讓我知道,我做錯了什麼,以便我可以返回0而不是總是返回1。

謝謝Jis。

回答

1

在功能setgolf刪除以下代碼:

if (std::cin.get() == '\0') 
return 0; 

,而是寫...

if(strlen(g.fullname)==0) 
    return 0; 

這是因爲當用戶不希望輸入一個名字,他只是打輸入密鑰。這使得字符串爲空,因爲getline填充字符數組直到它完全填充或在數據流中看到newline字符。所以,如果我們只是檢查它的長度,是否大於0,那麼它就夠了。爲進一步參考getline請參閱here

1

cin.get()返回'\0'的概率幾乎爲0。 (如果cin連接到終端,它可以如果 用戶輸入一個控制@纔會發生。)也許你想返回0,如果用戶 進入一個空字符串?

+0

是的,這是我想要做的 - 如果用戶輸入空字符串返回0。感謝您深入瞭解cin.get()不能做什麼。 – jis