2014-11-25 7 views
-5

Я работаю в школьном проекте, и я программирую игру Hangman. Нельзя использовать объектно-ориентированное программирование. Итак, я просто подумал о функциях (умный мальчик: D).слишком мало аргументов функции (char *)

Теперь у меня есть эти функции:

void LoadHangman(); 
int PlayHangman(char searchedWord[20], char platzhalter[8]); 
int FindLengthFromString(char searchedWord[]); 
int CheckIfLostOrWon(); 

В функции LoadHangman я инициирую Слово, которое должно получить найти от позже пользователя. Также я инициировал обугленного Arry под названием заполнителем, который только что получил «_»

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 

Я сердит о себе, что я к глупы, чтобы решить эту проблему (это, кажется, простой вопрос .... ..)

пс: Я читал книгу C++ ... но ... я ... просто .... Dont ... прибудете ... это .....

Hole Код, для всех этих богов программирования:

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

не работает, а также.

[Результат для других]

я исправил свою stupidness:

INT fehlerAnzahl = PlayHangman (searchedWord, заполнитель);

Спасибо всем.

+0

'CheckIfLostOrWon' должно« возвращать »значение во всех возможных путях (в настоящее время, если' fehlerAnzahl' не '8', тогда он упадет с конца, что приведет к неопределенному поведению) –

+0

ваша строка' int fehlerAnzahl = PlayHangman (), 'неверно. Вы вызываете свою функцию без параметров. Нет параметра меньше, чем 2 :-) – Klaus

+0

Почему у вас есть пустое имя ';' в нескольких местах после блоков управления? Кроме того, 'CheckIfLostOrWon' не всегда возвращает значение. 'warning: control достигает конца не-void функции [-Wreturn-type]' – Mahesh

ответ

1

PlayHangman функция требует 2 аргумента

Однако при попытке вызвать его не передать его аргументов:

int fehlerAnzahl = PlayHangman(); 

Вам нужно будет отправить правильные параметры для PlayHangman, чтобы это исправить компилятор дает вам подсказку, что это проблема с сообщением об ошибке, когда он говорит:

error: too few arguments to function 'int PlayHangman(char*, char*)' 

Всегда компилировать со всей в rnings и обратите внимание на любые предупреждения и ошибки, поскольку это хороший способ использовать компилятор, чтобы помочь вам найти и исправить свои проблемы. Кроме того, если это был реальный проект на C++, я бы настоятельно рекомендовал вам использовать std::sting для хранения ваших строк, это упростит вам работу.

+0

Спасибо! Я не видел его (* дамп *), нам не разрешено использовать «законченные» функции, но cout и cin; – Sinmson

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 без аргументов в этом месте. Если ваш компилятор не указывает, где была ошибка, это был бы странный компилятор.

1

У вас есть номер PlayHangman() по строке 73 без аргументов. Как вы уже упоминали, ваша функция PLayHangman() принимает два аргумента, и вы всегда должны пройти два аргумента.

Смежные вопросы