0

我试图完成一个 C++ 练习,您必须完成“高尔夫”函数的函数定义并基于此设计一个程序,但是,我遇到了其中一个函数的问题。

该函数的部分目标是,如果用户输入了高尔夫球手的姓名,则希望您返回 1,如果未输入姓名,则返回 0。

我遇到了一些困难,因为当我运行程序时,我总是将 1 返回到主程序。

下面我列出了到目前为止我为每个文件所做的工作:

高尔夫.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 */

高尔夫.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;

}

主文件

#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。

谢谢吉斯。

4

2 回答 2

1

cin.get()返回的概率'\0'几乎为 0。(如果cin连接到终端,则只有用户输入控件-@才会发生。)如果用户输入空字符串,您可能希望返回 0?

于 2013-06-19T14:58:49.703 回答
1

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

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

而是写...

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

这是因为当用户不想输入名称时,他只需按 Enter 键。这会使字符串为空,因为getline它会填充字符数组,直到它被完全填充或newline在流中看到一个字符。所以,如果我们只检查它的长度,它是否大于0,那么它就足够了。有关更多参考,getline请参见此处

于 2013-06-19T15:10:13.297 回答