C ++ for循环"语句没有效果"警告?

时间:2014-12-02 20:26:25

标签: c++ for-loop

所以我刚开始用C ++学习编程,而且我正在搞乱基本的控制台程序。我想做一个小垃圾邮件程序。这是代码:

#include <iostream>
#include <string>

using namespace std;

string a;
int b;

void repetition(){
    cout << "Please enter the number of time you want the text to be spammed" << endl;
    cin >> b;
}

void text(){
    cout << "Please enter the text you want to spam." << endl;
    cin >> a;

    for(;b == 0;){
        cout << a << endl;
        b - 1;
    }
}

int main()
{
    cout << "Welcome to your auto-spammer!!" << endl;
    repetition();
    text();

    return 0;

}

我收到一条警告说“声明对第20行的声明无效”。我想知道为什么以及如何解决这个问题。谢谢。

4 个答案:

答案 0 :(得分:4)

for循环在第二个语句为真时执行。因此,除非您输入0,否则它将永远不会执行。

警告适用于b - 1;。这将读取b的值,减去1,并且不对结果执行任何操作。您可能需要b = b - 1;(也可以写为b -= 1;--b;)。

答案 1 :(得分:2)

我猜这是第20行:

b - 1;

这条线本身什么都不做。 b-1的结果从未分配给任何东西。

尝试--b,将b减1并将该操作的结果重新分配给b。

答案 2 :(得分:1)

text()中,b-1确实没有做任何事,你可能意味着--b。第一个返回一个rvalue然后被丢弃,而第二个返回b一个并导致b(尽管你应该查找--bb--之间的差异了解该陈述实际上是如何运作的)。也就是说,更多的角色方式是这样的:

for(; b > 0; --b) //Also keep in mind that the second section of a for statement 
//is the continue condition, not exit
   cout << a << endl;

答案 3 :(得分:0)

您希望将文本打印N次,因此使用的正确循环是:

for (int i=0; i < b; i++)
   cout<<a<<endl;

修改b通常不是一个好主意,您可能需要用户稍后输入的值。