我已经尝试完成一个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。
答案 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