C++ File I/O skipping line every new iteration, why?












0















Why is the program skipping the first line of every new deptnum?



I am trying to read from a file that looks like:



1 Suits   0300 100 092
1 Coats 0200 060 065
1 Shirts 1000 012 013
2 Dresses 0400 060 065
2 Coats 0185 184 200
2 Shoes 0600 040 030
3 Jeans 0200 040 035
3 Shoes 0200 030 034
4 Jeans 0300 042 043


The deptnum is the first column.



And when I write to the other file I get:



                    Blinn Discount Apparel Company
Inventory Evaluation
10/12/2018

Unit Cost Extended
Quantity Cost Market Cost Market Lower Cost
Mens Dept
Suits 300 100.00 92.00 30000.00 27600.00
Coats 200 60.00 65.00 12000.00 13000.00
Shirts 1000 12.00 13.00 12000.00 13000.00
Total $54000.00 $53600.00 $53600.00
Womens Dept
Coats 185 184.00 200.00 34040.00 37000.00
Shoes 600 40.00 30.00 24000.00 18000.00
Total $112040.00 $108600.00 $108600.00
Girls Dept
Shoes 200 30.00 34.00 6000.00 6800.00
Total $118040.00 $115400.00 $115400.00
Boys Dept
Total $118040.00 $115400.00 $115400.00
Total Inventory $393000.00


It skipped Womens Dept -> Dresses, Girls Dept -> Jeans, and Boys Dept -> Jeans.



Here is my code:



#include <iostream>
#include <iomanip>
#include <fstream>

using namespace std;

int main()
{
ifstream inFile;
ofstream outFile;

int x = 1, deptnum, quant,cost,mkt,extcost,extmkt,totalcost = 0,totalmkt = 0,
lowcost,totalInv = 0;
char item [15];

inFile.open("blinn.dat");
outFile.open("blinn.dout");

if (!inFile)
cout <<"ntt Can't open data file: blinn.datn";


else {
outFile <<"nt Blinn Discount Apparel Companyn";
outFile <<"t Inventory Evaluationn";
outFile <<"t 10/12/2018n";
outFile <<"ntttttt Unit Costttt Extendedn";
outFile <<"tt Quantity Cost Market Cost Market Lower Cost";

while (x < 5)
{
if (x == 1)
outFile << "nMens Dept";
else if (x == 2)
outFile << "nWomens Dept";
else if (x == 3)
outFile << "nGirls Dept";
else if (x == 4)
outFile << "nBoys Dept";
else
break;

while (inFile >> deptnum >> item >> quant >> cost >> mkt)
{

if (deptnum == x){

extcost = quant * cost;
extmkt = quant * mkt;

outFile << left << "n " << setw(7)<< item << " "
<< right << setw(4)<< quant << " "
<< right << setw(4) << cost << ".00 "
<< right << setw(3) << mkt << ".00 "
<< right << setw(5) << extcost<< ".00 "
<< right << setw(5) << extmkt << ".00";

totalcost += extcost;
totalmkt += extmkt;

if (totalcost > totalmkt)
lowcost = totalmkt;
else
lowcost = totalcost;


}else
break;
}

outFile << right << "n Totalttttt $" << totalcost << ".00 $"
<< totalmkt << ".00 $"<< lowcost << ".00";

x += 1;

totalInv += lowcost;
}
}

outFile << "nTotal Inventorytttttt $"<< totalInv<< ".00";


inFile.close ();
outFile.close ();

return 0;
}


What is wrong with my logic?










share|improve this question


















  • 2





    Now is an excellent opportunity for you to learn how to use your debugger. Your debugger allows you to run your program one line at a time; inspect the values of all variables, as they change; and observe your program's logical behavior, and why it does exactly what it does. Knowing how to effectively use a debugger is a required skill for every C++ developer. The logical flaw in the shown code appears to be simple, and I'm sure that once you use your debugger to trace how each line of the input line gets read and what happens to it, you'll figure it out in no time at all. Good luck.

    – Sam Varshavchik
    Nov 14 '18 at 4:01













  • Many thanks to @Sam Varshavchik for mentioning the degugger, It's so useful i can't believe my teacher didn't even mention it in class.

    – Kyle Bading
    Dec 9 '18 at 18:42
















0















Why is the program skipping the first line of every new deptnum?



I am trying to read from a file that looks like:



1 Suits   0300 100 092
1 Coats 0200 060 065
1 Shirts 1000 012 013
2 Dresses 0400 060 065
2 Coats 0185 184 200
2 Shoes 0600 040 030
3 Jeans 0200 040 035
3 Shoes 0200 030 034
4 Jeans 0300 042 043


The deptnum is the first column.



And when I write to the other file I get:



                    Blinn Discount Apparel Company
Inventory Evaluation
10/12/2018

Unit Cost Extended
Quantity Cost Market Cost Market Lower Cost
Mens Dept
Suits 300 100.00 92.00 30000.00 27600.00
Coats 200 60.00 65.00 12000.00 13000.00
Shirts 1000 12.00 13.00 12000.00 13000.00
Total $54000.00 $53600.00 $53600.00
Womens Dept
Coats 185 184.00 200.00 34040.00 37000.00
Shoes 600 40.00 30.00 24000.00 18000.00
Total $112040.00 $108600.00 $108600.00
Girls Dept
Shoes 200 30.00 34.00 6000.00 6800.00
Total $118040.00 $115400.00 $115400.00
Boys Dept
Total $118040.00 $115400.00 $115400.00
Total Inventory $393000.00


It skipped Womens Dept -> Dresses, Girls Dept -> Jeans, and Boys Dept -> Jeans.



Here is my code:



#include <iostream>
#include <iomanip>
#include <fstream>

using namespace std;

int main()
{
ifstream inFile;
ofstream outFile;

int x = 1, deptnum, quant,cost,mkt,extcost,extmkt,totalcost = 0,totalmkt = 0,
lowcost,totalInv = 0;
char item [15];

inFile.open("blinn.dat");
outFile.open("blinn.dout");

if (!inFile)
cout <<"ntt Can't open data file: blinn.datn";


else {
outFile <<"nt Blinn Discount Apparel Companyn";
outFile <<"t Inventory Evaluationn";
outFile <<"t 10/12/2018n";
outFile <<"ntttttt Unit Costttt Extendedn";
outFile <<"tt Quantity Cost Market Cost Market Lower Cost";

while (x < 5)
{
if (x == 1)
outFile << "nMens Dept";
else if (x == 2)
outFile << "nWomens Dept";
else if (x == 3)
outFile << "nGirls Dept";
else if (x == 4)
outFile << "nBoys Dept";
else
break;

while (inFile >> deptnum >> item >> quant >> cost >> mkt)
{

if (deptnum == x){

extcost = quant * cost;
extmkt = quant * mkt;

outFile << left << "n " << setw(7)<< item << " "
<< right << setw(4)<< quant << " "
<< right << setw(4) << cost << ".00 "
<< right << setw(3) << mkt << ".00 "
<< right << setw(5) << extcost<< ".00 "
<< right << setw(5) << extmkt << ".00";

totalcost += extcost;
totalmkt += extmkt;

if (totalcost > totalmkt)
lowcost = totalmkt;
else
lowcost = totalcost;


}else
break;
}

outFile << right << "n Totalttttt $" << totalcost << ".00 $"
<< totalmkt << ".00 $"<< lowcost << ".00";

x += 1;

totalInv += lowcost;
}
}

outFile << "nTotal Inventorytttttt $"<< totalInv<< ".00";


inFile.close ();
outFile.close ();

return 0;
}


What is wrong with my logic?










share|improve this question


















  • 2





    Now is an excellent opportunity for you to learn how to use your debugger. Your debugger allows you to run your program one line at a time; inspect the values of all variables, as they change; and observe your program's logical behavior, and why it does exactly what it does. Knowing how to effectively use a debugger is a required skill for every C++ developer. The logical flaw in the shown code appears to be simple, and I'm sure that once you use your debugger to trace how each line of the input line gets read and what happens to it, you'll figure it out in no time at all. Good luck.

    – Sam Varshavchik
    Nov 14 '18 at 4:01













  • Many thanks to @Sam Varshavchik for mentioning the degugger, It's so useful i can't believe my teacher didn't even mention it in class.

    – Kyle Bading
    Dec 9 '18 at 18:42














0












0








0








Why is the program skipping the first line of every new deptnum?



I am trying to read from a file that looks like:



1 Suits   0300 100 092
1 Coats 0200 060 065
1 Shirts 1000 012 013
2 Dresses 0400 060 065
2 Coats 0185 184 200
2 Shoes 0600 040 030
3 Jeans 0200 040 035
3 Shoes 0200 030 034
4 Jeans 0300 042 043


The deptnum is the first column.



And when I write to the other file I get:



                    Blinn Discount Apparel Company
Inventory Evaluation
10/12/2018

Unit Cost Extended
Quantity Cost Market Cost Market Lower Cost
Mens Dept
Suits 300 100.00 92.00 30000.00 27600.00
Coats 200 60.00 65.00 12000.00 13000.00
Shirts 1000 12.00 13.00 12000.00 13000.00
Total $54000.00 $53600.00 $53600.00
Womens Dept
Coats 185 184.00 200.00 34040.00 37000.00
Shoes 600 40.00 30.00 24000.00 18000.00
Total $112040.00 $108600.00 $108600.00
Girls Dept
Shoes 200 30.00 34.00 6000.00 6800.00
Total $118040.00 $115400.00 $115400.00
Boys Dept
Total $118040.00 $115400.00 $115400.00
Total Inventory $393000.00


It skipped Womens Dept -> Dresses, Girls Dept -> Jeans, and Boys Dept -> Jeans.



Here is my code:



#include <iostream>
#include <iomanip>
#include <fstream>

using namespace std;

int main()
{
ifstream inFile;
ofstream outFile;

int x = 1, deptnum, quant,cost,mkt,extcost,extmkt,totalcost = 0,totalmkt = 0,
lowcost,totalInv = 0;
char item [15];

inFile.open("blinn.dat");
outFile.open("blinn.dout");

if (!inFile)
cout <<"ntt Can't open data file: blinn.datn";


else {
outFile <<"nt Blinn Discount Apparel Companyn";
outFile <<"t Inventory Evaluationn";
outFile <<"t 10/12/2018n";
outFile <<"ntttttt Unit Costttt Extendedn";
outFile <<"tt Quantity Cost Market Cost Market Lower Cost";

while (x < 5)
{
if (x == 1)
outFile << "nMens Dept";
else if (x == 2)
outFile << "nWomens Dept";
else if (x == 3)
outFile << "nGirls Dept";
else if (x == 4)
outFile << "nBoys Dept";
else
break;

while (inFile >> deptnum >> item >> quant >> cost >> mkt)
{

if (deptnum == x){

extcost = quant * cost;
extmkt = quant * mkt;

outFile << left << "n " << setw(7)<< item << " "
<< right << setw(4)<< quant << " "
<< right << setw(4) << cost << ".00 "
<< right << setw(3) << mkt << ".00 "
<< right << setw(5) << extcost<< ".00 "
<< right << setw(5) << extmkt << ".00";

totalcost += extcost;
totalmkt += extmkt;

if (totalcost > totalmkt)
lowcost = totalmkt;
else
lowcost = totalcost;


}else
break;
}

outFile << right << "n Totalttttt $" << totalcost << ".00 $"
<< totalmkt << ".00 $"<< lowcost << ".00";

x += 1;

totalInv += lowcost;
}
}

outFile << "nTotal Inventorytttttt $"<< totalInv<< ".00";


inFile.close ();
outFile.close ();

return 0;
}


What is wrong with my logic?










share|improve this question














Why is the program skipping the first line of every new deptnum?



I am trying to read from a file that looks like:



1 Suits   0300 100 092
1 Coats 0200 060 065
1 Shirts 1000 012 013
2 Dresses 0400 060 065
2 Coats 0185 184 200
2 Shoes 0600 040 030
3 Jeans 0200 040 035
3 Shoes 0200 030 034
4 Jeans 0300 042 043


The deptnum is the first column.



And when I write to the other file I get:



                    Blinn Discount Apparel Company
Inventory Evaluation
10/12/2018

Unit Cost Extended
Quantity Cost Market Cost Market Lower Cost
Mens Dept
Suits 300 100.00 92.00 30000.00 27600.00
Coats 200 60.00 65.00 12000.00 13000.00
Shirts 1000 12.00 13.00 12000.00 13000.00
Total $54000.00 $53600.00 $53600.00
Womens Dept
Coats 185 184.00 200.00 34040.00 37000.00
Shoes 600 40.00 30.00 24000.00 18000.00
Total $112040.00 $108600.00 $108600.00
Girls Dept
Shoes 200 30.00 34.00 6000.00 6800.00
Total $118040.00 $115400.00 $115400.00
Boys Dept
Total $118040.00 $115400.00 $115400.00
Total Inventory $393000.00


It skipped Womens Dept -> Dresses, Girls Dept -> Jeans, and Boys Dept -> Jeans.



Here is my code:



#include <iostream>
#include <iomanip>
#include <fstream>

using namespace std;

int main()
{
ifstream inFile;
ofstream outFile;

int x = 1, deptnum, quant,cost,mkt,extcost,extmkt,totalcost = 0,totalmkt = 0,
lowcost,totalInv = 0;
char item [15];

inFile.open("blinn.dat");
outFile.open("blinn.dout");

if (!inFile)
cout <<"ntt Can't open data file: blinn.datn";


else {
outFile <<"nt Blinn Discount Apparel Companyn";
outFile <<"t Inventory Evaluationn";
outFile <<"t 10/12/2018n";
outFile <<"ntttttt Unit Costttt Extendedn";
outFile <<"tt Quantity Cost Market Cost Market Lower Cost";

while (x < 5)
{
if (x == 1)
outFile << "nMens Dept";
else if (x == 2)
outFile << "nWomens Dept";
else if (x == 3)
outFile << "nGirls Dept";
else if (x == 4)
outFile << "nBoys Dept";
else
break;

while (inFile >> deptnum >> item >> quant >> cost >> mkt)
{

if (deptnum == x){

extcost = quant * cost;
extmkt = quant * mkt;

outFile << left << "n " << setw(7)<< item << " "
<< right << setw(4)<< quant << " "
<< right << setw(4) << cost << ".00 "
<< right << setw(3) << mkt << ".00 "
<< right << setw(5) << extcost<< ".00 "
<< right << setw(5) << extmkt << ".00";

totalcost += extcost;
totalmkt += extmkt;

if (totalcost > totalmkt)
lowcost = totalmkt;
else
lowcost = totalcost;


}else
break;
}

outFile << right << "n Totalttttt $" << totalcost << ".00 $"
<< totalmkt << ".00 $"<< lowcost << ".00";

x += 1;

totalInv += lowcost;
}
}

outFile << "nTotal Inventorytttttt $"<< totalInv<< ".00";


inFile.close ();
outFile.close ();

return 0;
}


What is wrong with my logic?







c++ file-io






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 14 '18 at 3:52









Kyle BadingKyle Bading

12




12








  • 2





    Now is an excellent opportunity for you to learn how to use your debugger. Your debugger allows you to run your program one line at a time; inspect the values of all variables, as they change; and observe your program's logical behavior, and why it does exactly what it does. Knowing how to effectively use a debugger is a required skill for every C++ developer. The logical flaw in the shown code appears to be simple, and I'm sure that once you use your debugger to trace how each line of the input line gets read and what happens to it, you'll figure it out in no time at all. Good luck.

    – Sam Varshavchik
    Nov 14 '18 at 4:01













  • Many thanks to @Sam Varshavchik for mentioning the degugger, It's so useful i can't believe my teacher didn't even mention it in class.

    – Kyle Bading
    Dec 9 '18 at 18:42














  • 2





    Now is an excellent opportunity for you to learn how to use your debugger. Your debugger allows you to run your program one line at a time; inspect the values of all variables, as they change; and observe your program's logical behavior, and why it does exactly what it does. Knowing how to effectively use a debugger is a required skill for every C++ developer. The logical flaw in the shown code appears to be simple, and I'm sure that once you use your debugger to trace how each line of the input line gets read and what happens to it, you'll figure it out in no time at all. Good luck.

    – Sam Varshavchik
    Nov 14 '18 at 4:01













  • Many thanks to @Sam Varshavchik for mentioning the degugger, It's so useful i can't believe my teacher didn't even mention it in class.

    – Kyle Bading
    Dec 9 '18 at 18:42








2




2





Now is an excellent opportunity for you to learn how to use your debugger. Your debugger allows you to run your program one line at a time; inspect the values of all variables, as they change; and observe your program's logical behavior, and why it does exactly what it does. Knowing how to effectively use a debugger is a required skill for every C++ developer. The logical flaw in the shown code appears to be simple, and I'm sure that once you use your debugger to trace how each line of the input line gets read and what happens to it, you'll figure it out in no time at all. Good luck.

– Sam Varshavchik
Nov 14 '18 at 4:01







Now is an excellent opportunity for you to learn how to use your debugger. Your debugger allows you to run your program one line at a time; inspect the values of all variables, as they change; and observe your program's logical behavior, and why it does exactly what it does. Knowing how to effectively use a debugger is a required skill for every C++ developer. The logical flaw in the shown code appears to be simple, and I'm sure that once you use your debugger to trace how each line of the input line gets read and what happens to it, you'll figure it out in no time at all. Good luck.

– Sam Varshavchik
Nov 14 '18 at 4:01















Many thanks to @Sam Varshavchik for mentioning the degugger, It's so useful i can't believe my teacher didn't even mention it in class.

– Kyle Bading
Dec 9 '18 at 18:42





Many thanks to @Sam Varshavchik for mentioning the degugger, It's so useful i can't believe my teacher didn't even mention it in class.

– Kyle Bading
Dec 9 '18 at 18:42












1 Answer
1






active

oldest

votes


















0














There is a problem with your logic:



if (deptnum == x) {
// do something
}
else {
break;
}


To achieve the else branch, you have already read a line that deptnum != x (the first line of every new deptnum) so at the next iterator, the current line is discarded by the next input line.






share|improve this answer























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53292958%2fc-file-i-o-skipping-line-every-new-iteration-why%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    There is a problem with your logic:



    if (deptnum == x) {
    // do something
    }
    else {
    break;
    }


    To achieve the else branch, you have already read a line that deptnum != x (the first line of every new deptnum) so at the next iterator, the current line is discarded by the next input line.






    share|improve this answer




























      0














      There is a problem with your logic:



      if (deptnum == x) {
      // do something
      }
      else {
      break;
      }


      To achieve the else branch, you have already read a line that deptnum != x (the first line of every new deptnum) so at the next iterator, the current line is discarded by the next input line.






      share|improve this answer


























        0












        0








        0







        There is a problem with your logic:



        if (deptnum == x) {
        // do something
        }
        else {
        break;
        }


        To achieve the else branch, you have already read a line that deptnum != x (the first line of every new deptnum) so at the next iterator, the current line is discarded by the next input line.






        share|improve this answer













        There is a problem with your logic:



        if (deptnum == x) {
        // do something
        }
        else {
        break;
        }


        To achieve the else branch, you have already read a line that deptnum != x (the first line of every new deptnum) so at the next iterator, the current line is discarded by the next input line.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 14 '18 at 4:13









        mrbluemrblue

        634




        634






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53292958%2fc-file-i-o-skipping-line-every-new-iteration-why%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Florida Star v. B. J. F.

            Error while running script in elastic search , gateway timeout

            Adding quotations to stringified JSON object values