簡體   English   中英

為什么我的代碼首先執行后面的cout?

[英]Why does my code perform the later cout first?

以下代碼

#include "stdafx.h"
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>

using namespace std;

bool checkPerm(unsigned long long x){
    vector<unsigned long long> tester;
    string strx = to_string(x);
    int sizestrx = strx.size();
    int counter = 1;
    cout << "x is " << strx << " and its permutations are ";
    while (next_permutation(strx.begin(), strx.end())){
        cout << strx << " ";
        unsigned long long stoipermstrx = stoi(strx);
        tester.push_back(stoipermstrx);
    }
    cout << endl;
    int sizetester = tester.size();
    for (int j = 2; j <= 6; j++){
        cout << "j is " << j << ' ';
        for (int k = 0; k < sizetester; k++){
            if (j*x == tester[k]){
                cout << "counter increased because x, counter " << x << " " << counter << endl;
                counter++;
                if (counter == 6){
                    cout << "Number is " << x << endl;
                    return true;
                }
                break;
            }
        }
        //cout << "Number " << x << " failed" << endl;
        return false;
    }
    return true;
}

int main(){
    unsigned long long x = 1;
    for (double i = 0; ; i++){
        cout << i << endl;
        while (x < 1.67*pow(10, i)){
            if (i == 5)
                cout << x << endl;
            if (checkPerm(x)){
                cin.get();
            }
            x++;
        }
        x = pow(10, (i + 1));
    }
    cin.get();
}

在這段代碼中存在以下問題:

cout << "x is " << strx << " and its permutations are ";
while (next_permutation(strx.begin(), strx.end())){
    cout << strx << " ";
    unsigned long long stoipermstrx = stoi(strx);
    tester.push_back(stoipermstrx);
}
cout << endl;
int sizetester = tester.size();
for (int j = 2; j <= 6; j++){
    cout << "j is " << j << ' ';
    for (int k = 0; k < sizetester; k++){
        if (j*x == tester[k]){
            cout << "counter increased because x, counter " << x << " " << counter << endl;
            counter++;
            if (counter == 6){
                cout << "Number is " << x << endl;
                return true;
            }
            break;
        }
    }
    //cout << "Number " << x << " failed" << endl;
    return false;
}

這里的輸出將是“ j是jx是x,其排列是(x的排列)”。 但是,控制台應打印“ x為x,其排列為(排列)j為j”。 給出以下示例輸出:

j is 2 x is 1355 and its permutations are 1535 1553 3155 3515 3551 5135 5153 531
5 5351 5513 5531
j is 2 x is 1356 and its permutations are 1365 1536 1563 1635 1653 3156 3165 351
6 3561 3615 3651 5136 5163 5316 5361 5613

看來這有兩件事。 第一,在打印j的值之前您沒有查看sizetester的值,並且在j的值之后也不打印換行符。 這意味着您將在當前'x'的行首顯示上一個循環j值。 如果我了解您的代碼應該執行的操作,則似乎正確地執行了它-這只是顯示輸出的方式而使它感到困惑。

嘗試這個:

int sizetester = tester.size();
for (int j = 2; j <= 6; j++){
    if (sizetester){                           // <-- added test (see below)
        cout << "j is " << j << '\n';          // <-- added newline
    }                                          // <--

針對sizetester的測試可抑制j值的虛假打印-以后無論如何(k < sizetester)測試(k < sizetester) 換行符只是防止j 的值在x的下一個值處開始 ,這似乎是導致輸出混亂的原因。

為什么我的代碼與 cout 有問題&lt; <num0+num1?< div><div id="text_translate"><p> 代碼在main中有問題。 當我嘗試cout&lt;&lt;num0-num1; 單獨或cout&lt;&lt;num0+num1; 單獨他們工作正常,但是當我一起做時,代碼只是停止打印其中一個,代碼的 rest 停止。 我的意思是:如果我把主要寫成:</p><pre class="lang-cpp prettyprint-override"> cout &lt;&lt; "Hello world;" &lt;&lt; endl, Fraction num0(90;150), Fraction num1(13;65); Fraction num2; cout&lt;&lt;num0; cout&lt;&lt;num1; cout&lt;&lt;num0-num1; cout&lt;&lt;num2; cout&lt;&lt;"idk whats wrong";</pre><p> 它工作正常並打印出來:</p><pre> 90/150 13/65 2/5 1/1 idk whats wrong Process returned -1073741819 (0xC0000005) execution time: 2.184 Press any key to continue.</pre><p> 但是,如果我把它寫成</p><pre class="lang-cpp prettyprint-override"> cout &lt;&lt; "Hello world;" &lt;&lt; endl, Fraction num0(90;150), Fraction num1(13;65); Fraction num2; cout&lt;&lt;num0; cout&lt;&lt;num1; cout&lt;&lt;num0-num1; cout&lt;&lt;num2; cout&lt;&lt;num0+num1; cout&lt;&lt;"idk whats wrong";</pre><p> 它打印:</p><pre> Hello world: 90/150 13/65 2/5 Process returned -1073741819 (0xC0000005) execution time. 2.608 s Press any key to continue.</pre><p> 這是代碼:<strong>主要:</strong></p><pre class="lang-cpp prettyprint-override"> #include &lt;iostream&gt; using namespace std; #import "Fraction.h" int main() { cout &lt;&lt; "Hello world;" &lt;&lt; endl, Fraction num0(90;150), Fraction num1(13;65); Fraction num2; cout&lt;&lt;num0; cout&lt;&lt;num1; cout&lt;&lt;num0-num1; cout&lt;&lt;num2; cout&lt;&lt;num0+num1; cout&lt;&lt;"idk whats wrong"; return 0; }</pre><p> <strong>分數 header:</strong></p><pre class="lang-cpp prettyprint-override"> #ifndef FRACTION_H #define FRACTION_H #include &lt;iostream&gt; using namespace std; class Fraction { public: Fraction(int num, int denom); Fraction(); Fraction reducedFraction(Fraction fract); Fraction operator+(const Fraction &amp;fraction); Fraction operator-(const Fraction &amp;fraction); Fraction&amp; operator= (const Fraction &amp;fraction); Fraction operator/(const Fraction &amp;fraction); Fraction operator*(const Fraction &amp;fraction); bool operator&lt;(const Fraction &amp;fraction); bool operator&gt;(const Fraction &amp;fraction); bool operator&lt;=(const Fraction &amp;fraction); bool operator&gt;=(const Fraction &amp;fraction); bool operator==(const Fraction &amp;fraction); friend ostream&amp; operator&lt;&lt;(ostream&amp; os, const Fraction&amp; fraction); friend istream&amp; operator&gt;&gt;(istream&amp; is, Fraction&amp; fraction); void setNum(int num); int getNum(); void setDenom(int denom); int getDenom(); virtual ~Fraction(); private: int num; int denom; int* arrN; int* arrD; int* arrC; }; #endif // FRACTION_H</pre><p> <strong>分數.cpp</strong></p><pre> #include "Fraction.h" Fraction::Fraction() { num=1; denom=1; } Fraction::Fraction(int num,int denom) { this-&gt;num=num; this-&gt;denom = denom; } void Fraction::setNum(int num) { this-&gt;num = num; } void Fraction::setDenom(int denom) { this-&gt;denom = denom; } int Fraction::getDenom() { return denom; } int Fraction::getNum() { return num; } Fraction Fraction::operator+(const Fraction&amp; fraction) { Fraction tmp; tmp.num=(this-&gt;num*fraction.denom)+(fraction.num*this-&gt;denom); tmp.denom =this-&gt;denom*fraction.denom; return reducedFraction(tmp); } Fraction Fraction::operator-(const Fraction &amp;fraction) { Fraction tmp; tmp.num=(this-&gt;num*fraction.denom)-(fraction.num*this-&gt;denom); tmp.denom =this-&gt;denom*fraction.denom; return reducedFraction(tmp); } Fraction Fraction::operator*(const Fraction &amp;fraction){ Fraction tmp; tmp.num=this-&gt;num*fraction.num; tmp.denom=this-&gt;denom*fraction.denom; return reducedFraction(tmp); } Fraction Fraction::operator/(const Fraction &amp;fraction){ Fraction tmp; tmp.num=this-&gt;num*fraction.denom; tmp.denom=this-&gt;denom*fraction.num; return reducedFraction(tmp); } bool Fraction::operator==(const Fraction &amp;fraction){ if((this-&gt;num/this-&gt;denom)==(fraction.num/fraction.denom)){ return true; } else { return false; } } bool Fraction::operator&gt;(const Fraction &amp;fraction){ if((this-&gt;num/this-&gt;denom)&gt;(fraction.num/fraction.denom)){ return true; } else { return false; } } bool Fraction::operator&lt;(const Fraction &amp;fraction){ if((this-&gt;num/this-&gt;denom)&lt;(fraction.num/fraction.denom)){ return true; } else { return false; } } bool Fraction::operator&gt;=(const Fraction &amp;fraction){ if((this-&gt;num/this-&gt;denom)&gt;=(fraction.num/fraction.denom)){ return true; } else { return false; } } bool Fraction::operator&lt;=(const Fraction &amp;fraction){ if((this-&gt;num/this-&gt;denom)&lt;=(fraction.num/fraction.denom)){ return true; } else { return false; } } Fraction&amp; Fraction::operator= (const Fraction &amp;fraction) { this-&gt;num=fraction.num; this-&gt;denom = fraction.denom; return *this; } ostream&amp; operator&lt;&lt;(ostream&amp; os, const Fraction&amp; fraction) { os&lt;&lt;fraction.num&lt;&lt;"/"&lt;&lt;fraction.denom&lt;&lt;endl; return os; } Fraction Fraction::reducedFraction( Fraction fract) { int* arrN = new int[fract.num]; int* arrD = new int[fract.denom]; int* arrC; int countN=0; int countD=0; for (int i = 2; i&lt;=fract.num; i++) { if (fract.num%i==0) { arrN[countN]=i; countN++; } } for (int i = 2; i&lt;=fract.denom; i++) { if (fract.denom%i==0) { arrD[countD]=i; countD++; } } if (countN&gt;=countD) { arrC = new int[countN]; } else { arrC = new int[countD]; } int countC =0; for ( int i = 0; i &lt;countN; i++) { for (int j=0; j&lt;countD; j++) { if(arrN[i]==arrD[j]) { arrC[countC]=arrN[i]; countC++; } } } int maxN = arrC[0]; for ( int i =1; i&lt;countC; i++) { if (arrC[i]&gt;maxN) { maxN=arrC[i]; } } Fraction tmp; tmp.num = fract.num/maxN; tmp.denom=fract.denom/maxN; return tmp; } Fraction::~Fraction() { delete[]arrC; delete[]arrN; delete[]arrD; }</pre> </div></num0+num1?<>

[英]Why does my code have trouble with cout<<num0+num1?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 為什么eclips在我的代碼中不知道cout和cin? 為什么我的代碼需要 cout 才能使 printf() 工作? 為什么我的代碼與 cout 有問題&lt; <num0+num1?< div><div id="text_translate"><p> 代碼在main中有問題。 當我嘗試cout&lt;&lt;num0-num1; 單獨或cout&lt;&lt;num0+num1; 單獨他們工作正常,但是當我一起做時,代碼只是停止打印其中一個,代碼的 rest 停止。 我的意思是:如果我把主要寫成:</p><pre class="lang-cpp prettyprint-override"> cout &lt;&lt; "Hello world;" &lt;&lt; endl, Fraction num0(90;150), Fraction num1(13;65); Fraction num2; cout&lt;&lt;num0; cout&lt;&lt;num1; cout&lt;&lt;num0-num1; cout&lt;&lt;num2; cout&lt;&lt;"idk whats wrong";</pre><p> 它工作正常並打印出來:</p><pre> 90/150 13/65 2/5 1/1 idk whats wrong Process returned -1073741819 (0xC0000005) execution time: 2.184 Press any key to continue.</pre><p> 但是,如果我把它寫成</p><pre class="lang-cpp prettyprint-override"> cout &lt;&lt; "Hello world;" &lt;&lt; endl, Fraction num0(90;150), Fraction num1(13;65); Fraction num2; cout&lt;&lt;num0; cout&lt;&lt;num1; cout&lt;&lt;num0-num1; cout&lt;&lt;num2; cout&lt;&lt;num0+num1; cout&lt;&lt;"idk whats wrong";</pre><p> 它打印:</p><pre> Hello world: 90/150 13/65 2/5 Process returned -1073741819 (0xC0000005) execution time. 2.608 s Press any key to continue.</pre><p> 這是代碼:<strong>主要:</strong></p><pre class="lang-cpp prettyprint-override"> #include &lt;iostream&gt; using namespace std; #import "Fraction.h" int main() { cout &lt;&lt; "Hello world;" &lt;&lt; endl, Fraction num0(90;150), Fraction num1(13;65); Fraction num2; cout&lt;&lt;num0; cout&lt;&lt;num1; cout&lt;&lt;num0-num1; cout&lt;&lt;num2; cout&lt;&lt;num0+num1; cout&lt;&lt;"idk whats wrong"; return 0; }</pre><p> <strong>分數 header:</strong></p><pre class="lang-cpp prettyprint-override"> #ifndef FRACTION_H #define FRACTION_H #include &lt;iostream&gt; using namespace std; class Fraction { public: Fraction(int num, int denom); Fraction(); Fraction reducedFraction(Fraction fract); Fraction operator+(const Fraction &amp;fraction); Fraction operator-(const Fraction &amp;fraction); Fraction&amp; operator= (const Fraction &amp;fraction); Fraction operator/(const Fraction &amp;fraction); Fraction operator*(const Fraction &amp;fraction); bool operator&lt;(const Fraction &amp;fraction); bool operator&gt;(const Fraction &amp;fraction); bool operator&lt;=(const Fraction &amp;fraction); bool operator&gt;=(const Fraction &amp;fraction); bool operator==(const Fraction &amp;fraction); friend ostream&amp; operator&lt;&lt;(ostream&amp; os, const Fraction&amp; fraction); friend istream&amp; operator&gt;&gt;(istream&amp; is, Fraction&amp; fraction); void setNum(int num); int getNum(); void setDenom(int denom); int getDenom(); virtual ~Fraction(); private: int num; int denom; int* arrN; int* arrD; int* arrC; }; #endif // FRACTION_H</pre><p> <strong>分數.cpp</strong></p><pre> #include "Fraction.h" Fraction::Fraction() { num=1; denom=1; } Fraction::Fraction(int num,int denom) { this-&gt;num=num; this-&gt;denom = denom; } void Fraction::setNum(int num) { this-&gt;num = num; } void Fraction::setDenom(int denom) { this-&gt;denom = denom; } int Fraction::getDenom() { return denom; } int Fraction::getNum() { return num; } Fraction Fraction::operator+(const Fraction&amp; fraction) { Fraction tmp; tmp.num=(this-&gt;num*fraction.denom)+(fraction.num*this-&gt;denom); tmp.denom =this-&gt;denom*fraction.denom; return reducedFraction(tmp); } Fraction Fraction::operator-(const Fraction &amp;fraction) { Fraction tmp; tmp.num=(this-&gt;num*fraction.denom)-(fraction.num*this-&gt;denom); tmp.denom =this-&gt;denom*fraction.denom; return reducedFraction(tmp); } Fraction Fraction::operator*(const Fraction &amp;fraction){ Fraction tmp; tmp.num=this-&gt;num*fraction.num; tmp.denom=this-&gt;denom*fraction.denom; return reducedFraction(tmp); } Fraction Fraction::operator/(const Fraction &amp;fraction){ Fraction tmp; tmp.num=this-&gt;num*fraction.denom; tmp.denom=this-&gt;denom*fraction.num; return reducedFraction(tmp); } bool Fraction::operator==(const Fraction &amp;fraction){ if((this-&gt;num/this-&gt;denom)==(fraction.num/fraction.denom)){ return true; } else { return false; } } bool Fraction::operator&gt;(const Fraction &amp;fraction){ if((this-&gt;num/this-&gt;denom)&gt;(fraction.num/fraction.denom)){ return true; } else { return false; } } bool Fraction::operator&lt;(const Fraction &amp;fraction){ if((this-&gt;num/this-&gt;denom)&lt;(fraction.num/fraction.denom)){ return true; } else { return false; } } bool Fraction::operator&gt;=(const Fraction &amp;fraction){ if((this-&gt;num/this-&gt;denom)&gt;=(fraction.num/fraction.denom)){ return true; } else { return false; } } bool Fraction::operator&lt;=(const Fraction &amp;fraction){ if((this-&gt;num/this-&gt;denom)&lt;=(fraction.num/fraction.denom)){ return true; } else { return false; } } Fraction&amp; Fraction::operator= (const Fraction &amp;fraction) { this-&gt;num=fraction.num; this-&gt;denom = fraction.denom; return *this; } ostream&amp; operator&lt;&lt;(ostream&amp; os, const Fraction&amp; fraction) { os&lt;&lt;fraction.num&lt;&lt;"/"&lt;&lt;fraction.denom&lt;&lt;endl; return os; } Fraction Fraction::reducedFraction( Fraction fract) { int* arrN = new int[fract.num]; int* arrD = new int[fract.denom]; int* arrC; int countN=0; int countD=0; for (int i = 2; i&lt;=fract.num; i++) { if (fract.num%i==0) { arrN[countN]=i; countN++; } } for (int i = 2; i&lt;=fract.denom; i++) { if (fract.denom%i==0) { arrD[countD]=i; countD++; } } if (countN&gt;=countD) { arrC = new int[countN]; } else { arrC = new int[countD]; } int countC =0; for ( int i = 0; i &lt;countN; i++) { for (int j=0; j&lt;countD; j++) { if(arrN[i]==arrD[j]) { arrC[countC]=arrN[i]; countC++; } } } int maxN = arrC[0]; for ( int i =1; i&lt;countC; i++) { if (arrC[i]&gt;maxN) { maxN=arrC[i]; } } Fraction tmp; tmp.num = fract.num/maxN; tmp.denom=fract.denom/maxN; return tmp; } Fraction::~Fraction() { delete[]arrC; delete[]arrN; delete[]arrD; }</pre> </div></num0+num1?<> 為什么這段代碼會編譯? cout &lt;“tt”; 為什么 cout 在這段代碼中打印“2 + 3 = 15”? 為什么我的cout打印兩次? 為什么我的 cout 輸出沒有立即出現? 當我刪除cout語句時,為什么我的C ++程序會因退出代碼11而崩潰? 為什么我的代碼在第一個 if 語句處中斷? 為什么代碼沒有提示?
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM