我是编程新手,并试图改进我的基本倒数计时器。我不知道为什么我收到这个错误,其他问题在不同情况下,因此不符合我的计划。
//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;
}
任何帮助都将不胜感激。
答案 0 :(得分:5)
char progend[5];
...
if (progend [5] = "start")
尝试将字符串文字"start"
分配给progend
数组的第6个字符(它甚至不存在)。请注意,即使此代码尝试分配字符,在结束后写入数组也会导致未定义的行为。
您可以使用C风格的strcmp
:
if (strcmp(progend, "start") == 0)
或更好:因为这是C ++,所以改为使用std::string
对象:
std::string progend;
...
if (progend == "start") ... // <-- this will use std::string::operator==
答案 1 :(得分:1)
您正在为<{p>中的const char *
变量分配char
if (progend[5] = "end")
progend[5]
是包含char值的char数组的元素。 "end"
无法分配给它。
您可以使用std::string
。然后比较它
std::string progend;
...
if(progend == "end")
{
//your code
答案 2 :(得分:1)
您尝试将char*
分配给char
,我假设您要进行比较。
因此请使用strstr
if (strstr(progend,"end" )){
//...
}
同样所有其他地方
但是在使用C ++时,为什么不使用std::string
std::string progend;
if(progend.find("end") != std::string::npos)
{
}
答案 3 :(得分:1)
你犯了很多不同的错误。
cin >> progend[5];
在这里,您要求输入字符而不是字符串。更重要的是,索引5超出了数组的范围(我们从0开始计数)。
progend[5] = "start"
这里有两个错误。要比较相等性,请使用==
代替=
。你实际做的是尝试分配一个值。更重要的是,"start"
是一个C型字符串,或者更好的指向字符串第一个字符的指针。
为什么不简单地使用C ++ STL中的字符串?
#include <string>
using namespace std;
// etc.
String progend;
此外,将progend[5]
的所有实例替换为progend
,您没有引用特定的位置。平等检查也必须是==
。
我希望这有帮助! :d