我在一个学校项目工作,我正在编写游戏Hangman。 不允许使用面向对象的编程。 所以我只考虑了功能(聪明的男孩:D)。
现在我有了这个功能:
void LoadHangman();
int PlayHangman(char searchedWord[20], char platzhalter[8]);
int FindLengthFromString(char searchedWord[]);
int CheckIfLostOrWon();
在函数LoadHangman中,我启动了一个Word,以后可以从用户那里找到它。 我还发起了一个叫做占位符的字符,只是得到了'_'
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 ++书......但是......我......只是......不......得......它......
孔代码,对于所有这些编程神:
#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;
}
对不起,评论是德语。
已经尝试过使用(指针)
int PlayHangman(char* searchedWord,char* placeholder)
不工作。
[其他人的结果]
我纠正了我的愚蠢行为:
int fehlerAnzahl = PlayHangman(searchingWord,placeholder);
谢谢大家。
答案 0 :(得分:1)
PlayHangman
函数需要2个参数
然而,当你试图打电话时,你不会传递任何论据:
int fehlerAnzahl = PlayHangman();
您需要将正确的参数发送到PlayHangman
以解决此问题,编译器会在提示时提示您这是错误消息的问题:
error: too few arguments to function 'int PlayHangman(char*, char*)'
始终在启用所有警告的情况下进行编译,并注意任何警告和错误,因为这是使用编译器帮助您查找和修复问题的好方法。此外,如果这是一个真正的c ++项目,我强烈建议你使用std::sting
存储你的字符串,这将使你的事情变得更容易。
答案 1 :(得分:1)
请参阅完整编译器错误消息:
k.cc: In function 'int CheckIfLostOrWon(char*, char*)':
k.cc:73:36: error: too few arguments to function 'int PlayHangman(char*, char*)'
int fehlerAnzahl = PlayHangman();
^
这告诉你到底要去哪里。你在那个地方调用没有参数的PlayHangman
函数。如果您的编译器没有指出错误的位置......那将是一个奇怪的编译器。
答案 2 :(得分:1)
第73行有一个PlayHangman()
没有参数。正如您所提到的,您的PLayHangman()函数有两个参数,而总是必须传递两个参数。