c ++中的多个return语句

时间:2013-06-19 14:56:04

标签: c++ function return

我已经尝试完成一个C ++练习,你需要完成'Golf'函数的函数定义并根据它设计一个程序,但是我遇到了其中一个函数的问题。

该功能的部分目标是,如果用户输入了高尔夫球员的名字,则要返回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。

2 个答案:

答案 0 :(得分:1)

cin.get()返回'\0'的概率几乎为0。 (如果cin连接到终端,则只有在{ 用户输入一个控件 - @。)如果用户可能要返回0 进入一个空字符串?

答案 1 :(得分:1)

在函数setgolf中删除以下代码:

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

而是写...

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

这是因为当用户不想输入名称时,他只需点击回车键即可。这使得字符串为空,因为getline填充字符数组,直到它完全填充或在流中看到newline字符。所以,如果我们只检查它的长度,是否大于0,那么就足够了。有关getline的更多信息,请参阅here