Я новичок в программировании и пытаюсь улучшить свой основной таймер обратного отсчета. Я не знаю, почему я получаю эту ошибку, а другие вопросы находятся в разных ситуациях и поэтому не подходят для моей программы.
//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;
}
Любая помощь будет оценена по достоинству.
Вы пытаетесь присвоить char*
char
, я предполагаю, что вы хотите сравнить.
Поэтому используйте strstr
if (strstr(progend,"end" )){
//...
}
Точно так же все остальные места
Но почему бы не использовать std::string
при использовании C++
std::string progend;
if(progend.find("end") != std::string::npos)
{
}
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==
Вы присваиваете const char *
переменной char
в
if (progend[5] = "end")
progend[5]
- это элемент массива char, который содержит значение char. "end"
не может быть назначено ему.
Вы можете использовать std::string
. Затем сравните его как
std::string progend;
...
if(progend == "end")
{
//your code
Вы сделали несколько разных ошибок.
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