`const char * 'to` char'

0

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

//countdown timer using while loops, if else, strings and sleep

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

int main ()
{
    char progend[5];
    float a; /* a will be floating point */
    cout << "Enter start the the number you want to count down from" << ".\n";

    while (a>-1) { /* the main program is located here */

        cin >> progend[5];

        if (progend[5] = "end") /* if the user inputs end the program ends */
        {
            a = -1;
        }

        else if (progend [5] = "start")
        {
            cin >> a;
            while (a>0) { /* the actual countdown timer*/
                Sleep(100);
                a = a - 0.1;
                cout << a;
            }

            cout << "Finished!" << ".\n" << "Enter start then enter another number to count down                 from or enter end to close the program" << ".\n";
        }

        else
        {
            cout << "Enter yes or end";
        }

    }
return 0;
}

Любая помощь будет оценена по достоинству.

Теги:
string
pointers
comparison
countdown

4 ответа

1
Лучший ответ

Вы пытаетесь присвоить char* char, я предполагаю, что вы хотите сравнить.

Поэтому используйте strstr

if (strstr(progend,"end" )){
//...

}

Точно так же все остальные места

Но почему бы не использовать std::string при использовании C++

std::string progend;

if(progend.find("end") != std::string::npos)
{

}
  • 0
    Спасибо, программа работает сейчас
5
char progend[5];
...
if (progend [5] = "start")

пытается назначить строковый литерал "start" для 6-го символа массива progend (который даже не существует). Обратите внимание, что даже если этот код попытался назначить символ, запись в массив после его завершения вызовет неопределенное поведение.

Вы можете использовать C-style strcmp:

if (strcmp(progend, "start") == 0)

или еще лучше: поскольку это C++, вместо этого используйте std::string:

std::string progend;
...
if (progend == "start") ...      // <-- this will use std::string::operator==
  • 0
    @BenjaminLindley: Справедливо. Отредактировано :)
1

Вы присваиваете const char * переменной char в

if (progend[5] = "end")

progend[5] - это элемент массива char, который содержит значение char. "end" не может быть назначено ему.

Вы можете использовать std::string. Затем сравните его как

std::string progend;
...
if(progend == "end")
{
    //your code
  • 3
    Его назначение, а не сравнение!
  • 1
    Я не вижу никакого сравнения
Показать ещё 3 комментария
1

Вы сделали несколько разных ошибок.

cin >> progend[5];

Здесь вы запрашиваете ввод символа вместо строки. Более того, индекс 5 выходит за границы массива (мы начинаем отсчет с 0).

progend[5] = "start"

Здесь есть две ошибки. Чтобы сравнить для равенства, вы используете use == вместо =. Фактически вы пытаетесь присвоить значение. Более того, "start" - это строка C-типа или лучше указатель на первый символ строки.

Почему бы вам просто не использовать String из C++ STL?

#include <string>
using namespace std;

// etc.

String progend;

Кроме того, замените все экземпляры progend[5] на progend, вы не ссылаетесь на определенную позицию. Проверка равенства также должна быть ==.

Надеюсь, это поможет!!! : D

Ещё вопросы

Сообщество Overcoder
Наверх
Меню