Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 环路故障_C++_Visual C++ - Fatal编程技术网

C++ 环路故障

C++ 环路故障,c++,visual-c++,C++,Visual C++,我需要使程序循环,直到用户输入“XXXX”作为名称。问题是,我的代码最多只循环一次并退出。我试过和你乱搞。。。整整一天,我似乎都不明白这一点,但我觉得我真的很接近 编辑: 你们太棒了!进行了这两项更改,但现在它跳过名称提示,直接转到存款提示。如何让它在循环中包含名称提示 #include <iostream> #include <iomanip> #include <string> using namespace std; int main() { str

我需要使程序循环,直到用户输入“XXXX”作为名称。问题是,我的代码最多只循环一次并退出。我试过和你乱搞。。。整整一天,我似乎都不明白这一点,但我觉得我真的很接近

编辑:
你们太棒了!进行了这两项更改,但现在它跳过名称提示,直接转到存款提示。如何让它在循环中包含名称提示

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;

int main() {

string name, XXXX;
float deposit, time, interest, total, totinterest;
int compound;

cout << left;

int flag = 0;

do {

    cout << "Enter your name or XXXX to stop: ";
    getline(cin, name);
    cout << name << " enter the following information: " << endl;


    if (name == "XXXX"){
        flag = 1;
    }else 
    {

        cout << setw(60) << "\tAmount on deposit: ";
        cin >> deposit;
        if (!deposit || deposit < 0){
            cout << "\tPlease enter a positive number! ";

        }

        cout << setw(60) << "\tYears on deposit: ";
        cin >> time;
        if (!time || time < 0){
            cout << "\tPlease enter a positive number! ";
            return(0);
        }

        cout << setw(60) << "\tNumber of times the interest is compounded per year: ";
        cin >> compound;
        if (!compound || compound < 0){
            cout << "\tPlease enter a positive number! ";
            return(0);
        }

        if (time >= 5)
            interest = .045;
        else if (time >= 4)
            interest = .04;
        else if (time >= 3)
            interest = .035;
        else if (time >= 2)
            interest = .025;
        else if (time >= 1)
            interest = .02;
        else if (time < 1)
            interest = .015;

        total = (deposit)*pow((1 + interest / compound), (compound * time));
        totinterest = total - deposit;

        cout << left << setprecision(2) << fixed;
        cout << endl;
        cout << setw(15) << "Name " << setw(14) << "Years" << setw(18) << "Deposit Amount" << setw(18) << "Interest Earned " << setw(18) << "Total" << endl;
        cout << "===============================================================================" << endl;
        cout << setw(15) << name << setw(14) << time << setw(1) << "$" << setw(17) << deposit << setw(1) << "$" << setw(17) << totinterest << setw(1) << "$" << setw(18) << total << endl;
        cout << endl;
        cout << "Thank you for using tax program. Have a nice day. " << endl;
        return(0);

    }

} while (flag = 0);

}
#包括
#包括
#包括
使用名称空间std;
int main(){
字符串名,XXXX;
浮动存款、时间、利息、总额、总利息;
int化合物;

cout因为您在
while
条件下使用的是
=
而不是
=

flag=0
更改为
!flag
flag==0

除此之外,您还有
返回0
,它是无条件的。此返回语句将使程序无论如何退出。

返回(0)将使您脱离主程序。删除该行并重试。

您有
返回(0)
在else子句中。另外,在while循环中有
=
而不是
=
,while循环(删除return语句后)是无限循环的配方。

return(0)
将退出
main()
,程序将终止。因此,将其从源代码中删除

另外,
while(flag=0)
中的条件将始终返回
false
。将其更改为
while(flag==0)
,否则将导致循环只迭代一次

最后,对于
pow()
函数,您需要

#include <math.h>
#包括
您必须包括

#include <math.h> 
#包括

使pow函数正常工作。我得到一个错误,pow未定义。

首先,您希望while条件为
while(标志=0)
和not
while(标志=0)

此外,如果用户输入的时间、存款或复合值无效(例如小于0),则您的代码将打印出错误消息并退出。相反,您希望在那里放置一个while循环,只要用户不断提供错误的输入,它就会不断提示用户输入有效的输入


最后,您希望使用类似于
myString.compare(otherString)
而不是==运算符使用
continue;
而不是
return(0)
顺便问一下,如果您输入文本而不是无限循环发生的数量,它是否正在运行。这似乎发生在while循环的第二次或更大的迭代中。您知道如何让程序在每个循环中重新输入我的名字吗?它当前跳过该部分,直接进入存款部分。跳过第一次迭代或后续迭代?这只会导致一个无限循环,而不是他看到的。然而,一旦他修复了返回语句,这将是显而易见的,因此无论如何都要进行upvote。进行了两次更改,但现在它跳过名称提示,直接进入存款提示。我如何让它在循环中包含名称提示?疯了e这两个更改,但现在它跳过名称提示,直接进入存款提示。我如何让它在循环中包含名称提示?@Theoomer:这是在第一次迭代还是在后续迭代中?后续。第一部分正是我想要的,但它在后续迭代中跳过名称提示。@Theoomer:什么我想。伪代码:
do{cout−1“是无限循环的配方”是不正确的,Ron在我为他修好后将其改回了。天啊,同意,正如我之前提到的,当在第二次或更大迭代中输入ivalid值时,无效值会触发无限循环,并且您也不能更改客户名称。Re“您希望使用类似myString.compare(otherString)的内容,而不是==运算符",不,它没有任何优点,缺点是不够清晰和更加详细。这可能是Java ism,您必须这样做。关于
,从C++11及更高版本开始,它甚至没有比普通
更正式的优点,并且可能会导致一些可移植性问题。因此,使用orig是一个好主意inal C library
。然而,对于学生的练习来说,这几乎不重要,因为它可能无论如何都不会被移植;在g++头文件中存在或曾经存在一些错误(我不记得这一点,但关于这一点的问题很多)对于一些初学者来说,更重要的是感觉到他们正在以C++的感知精神前进。