Программа скачек, вызов функции игнорируется

При распечатке кода он запускается, но, похоже, не запускает функцию coinflip(). В настоящее время пытается распечатать только первую строку лошади, случайным образом продвигаясь вперед.

#include <iostream>
#include <string>
#include <time.h>
#include <stdlib.h>
using namespace std;

string h0 = "0................";
string h1 = "1................";
string h2 = "2................";
string h3 = "3................";
string h4 = "4................";
int position0 = 0;
string coinflip0(string h0);

int main(){

   cout << "Press Enter to begin! " <<endl;
   cin.ignore();
   std::cout << h0 << endl; //print string
   cout << h1 << endl;
   cout << h2 << endl;
   cout << h3 << endl;
   cout << h4 << endl;

//      srand(time(NULL));//time goes back to zero for each loop

   while(h0.at(16) != 0) {
        cout << "\n Press Enter to continue " << endl;
        cin.ignore();

        string coinflip0(h0); // call function
        cout << h0 << endl; //print new string
   } //end while
} // end main

string coinflip0(string h0) {

   // find random number(0 or 1)
   int num = rand() % 2;
        cout << num << endl;
   position0 = position0 + num;

   if(num==1){
        std::swap(h0[position0], h0[position0+1]);
   } // end if

   return h0;
}//end coin flip

Выход:

Press Enter to begin!

0................
1................
2................
3................
4................

 Press Enter to continue

0................

 Press Enter to continue

0................

 Press Enter to continue

0................

 Press Enter to continue

Незнание, как вызвать функцию, должно подпадать под «простую типографскую ошибку», иначе нам понадобится другая категория флагов для этого. Среди других непонятных деталей в вашем коде - почему вы делаете while(h0.at(16) != 0) и что, по вашему мнению, это подействует?

underscore_d 13.09.2018 22:06

Я пытался проверить, был ли последний символ в строке нулем, и если это так, цикл остановится. Я нашел способ сделать это именно так, хотя мог быть более простой способ, которого я не нашел.

Lauren Fasig 13.09.2018 22:32
0 - это не то же самое, что '0', поэтому я не понимаю, почему это когда-либо сработает, то есть почему ваш цикл не будет продолжаться вечно. Вы проверяете символ с целочисленным значением 0 или '\0' или NUL, а не с цифрой ASCII '0' (которая имеет целочисленное значение 48). И делать это не имеет смысла и бесполезно в любой реальной ситуации, которую я могу придумать (поскольку '\0' обычно используется только как символ окончания строки).
underscore_d 13.09.2018 23:08
2
3
334
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
string coinflip0(h0); // call function

На самом деле это не вызов функции. Это объявление переменной, похожее на:

string coinflip0 = h0;

Для вызова функции опустите string. Простой coinflip0(h0) сделает свое дело. И я так понимаю, вы хотите вернуть результат h0, так что сделайте это тоже:

h0 = coinflip0(h0);

Другие вопросы по теме