【发布时间】:2015-01-24 00:39:06
【问题描述】:
我在一个学校项目中工作,我正在编写游戏刽子手。 不允许使用面向对象的编程。 所以我只考虑函数(聪明的男孩:D)。
现在我有了这个功能:
void LoadHangman();
int PlayHangman(char searchedWord[20], char platzhalter[8]);
int FindLengthFromString(char searchedWord[]);
int CheckIfLostOrWon();
在函数 LoadHangman 中,我启动了一个 Word,稍后应该从用户那里找到它。 我还发起了一个名为 placeholder 的字符数组,它刚刚得到了 '_'
char searchedWord[20] = {'H','a','n','g','m','a','n',0};
char placeholder[8] = {'_','_','_','_','_','_','_'};
现在我想把它转移到函数 PlayHangman( ... )
PlayHangman(searchedWord,placeholder);
现在,我启动函数 PlayHangman( ... )
int PlayHangman(char searchedWord[20],char placeholder[8])
编译器只是说: 开头{从函数:
error: too few arguments to function 'int PlayHangman(char*, char*)'
在这个函数的最后 }:
error: at this point in file
我对自己很生气,我太笨了,要解决这个问题(这似乎是一个简单的问题......)
ps:我正在读一本 C++ 书……但是……我……只是……不……明白……它……
Hole Code,献给所有这些编程之神:
#include <iostream>
using namespace std;
///Funktionsdeklarationen
void LoadHangman();
int PlayHangman(char searchedWord[20], char placeholder[8]);
int FindLengthFromString(char searchedWord[]);
int CheckIfLostOrWon();
int main()
{
///Deklarationen
int won_lost = CheckIfLostOrWon();
///Programm
LoadHangman();
switch(won_lost)
{
case 1: cout << "\n\nGlückwunsch! Sie haben gewonnen!\n"; return 0;break;
case -1: cout << "\n\nSchade. Sie haben leider nicht gewonnen.\n";return 0; break;
default : break;
}
}
void LoadHangman()
{
///Deklarationen
char searchedWord[20] = {'H','a','n','g','m','a','n',0};
char placeholder[8] = {'_','_','_','_','_','_','_'};
int lengthFromString;
///Programm
lengthFromString = FindLengthFromString(searchedWord);
cout << "Gesuchtes Wort: ";
for(int i = 0; i < lengthFromString; i++) {cout << " " << placeholder[i] << endl;}
cout << "Bitte geben Sie einen Buchstaben ein: ";
PlayHangman(searchedWord,placeholder);
}
int PlayHangman(char searchedWord[20],char placeholder[8])
{
///Deklarationen / Initialisation
int uebereinstimmung;
int fehlerAnzahl = 0;
char character;
int lengthFromString = FindLengthFromString(searchedWord);
uebereinstimmung = 0;
///Programm
cin >> character;
for(int i = 0; i < lengthFromString; i++) //Für die Länge des Strings
{
if(character != searchedWord[i]) {uebereinstimmung -= 1;} //Übereinstimmung verringern
else if(character == searchedWord[i]) {placeholder[i] = character; uebereinstimmung = 100;}; //Platzhalter mit Buchstaben füllen und übereinstimmung auf 100 setzen
}
if(uebereinstimmung < 0) {fehlerAnzahl++;};
return fehlerAnzahl;
}
int CheckIfLostOrWon(char searchedWord[],char placeholder[])
{
///Deklarationen
int lengthFromString = FindLengthFromString(searchedWord);
int fehlerAnzahl = PlayHangman();
///Programm
int won = 0;
for(int i = 0; i < lengthFromString; i++)
{
if(placeholder[i] == searchedWord[i]) {won++;};
}
if(won == lengthFromString) {return 1;};
switch(fehlerAnzahl)
{
case 8: return -1;
}
}
int FindLengthFromString(char searchedWord[])
{
///Deklarationen
int lengthFromString = 0;
int i = 0;
///Programm
while(searchedWord[i] != 0) {lengthFromString++; i++;}
return lengthFromString;
}
抱歉,cmets 是德语的。
已经尝试使用(指针)
int PlayHangman(char* searchedWord,char* placeholder)
也不能正常工作。
[其他人的结果]
我纠正了我的愚蠢:
int fehlerAnzahl = PlayHangman(searchedWord,placeholder);
谢谢大家。
【问题讨论】:
-
CheckIfLostOrWon需要在每个可能的路径中为return一个值(当前如果fehlerAnzahl不是8那么它会掉到最后,这会导致未定义的行为) -
你的
int fehlerAnzahl = PlayHangman();是错误的。你调用你的函数没有参数。没有参数小于 2 :-) -
为什么你在控制块后面的几个地方有一个空的stamement
;?此外,CheckIfLostOrWon并不总是返回值。warning: control reaches end of non-void function [-Wreturn-type]