2014-11-24 5 views
-4

поэтому я должен читать в файле на C++, и я думаю, что я все делаю правильно, но когда я иду отлаживать его, появляется только черный экран и когда я выхожу из черного экрана внизу под выходами он говорит, что не может найти или открыть файл pdb. Может ли кто-нибудь найти то, что я делаю неправильно? У меня есть оба файла, открытые до файлов ресурсов. Вот мой код:чтение в файлах C++

include iostream, 
include string, 
include fstream, 
using namespace std; 
struct dataStruct { 
    string playerId, 
    lastName, 
    firstName, 
    division, 
    team; 
    double plateAppearances, 
    atBats, 
    singles, 
    doubles, 
    triples, 
    homeRuns, 
    sackFlys, 
    walks, 
    hitByPitch, 
    battingAvg, 
    onBasePercentage, 
    slugginPercentage, 
    hits, 
    sacrifices, 
    sacrificeFlys; 
}; 
int main() { 
    string playerId = "", 
    lastName = "", 
    firstName = "", 
    division = "", 
    team = ""; 
    double plateAppearances = 0, 
    atBats = 0, 
    singles = 0, 
    doubles = 0, 
    triples = 0, 
    homeRuns = 0, 
    sackFlys = 0, 
    walks = 0, 
    hitByPitch = 0, 
    battingAvg = 0, 
    onBasePercentage = 0, 
    slugginPercentage = 0; { 
     dataStruct playerStats[500]; 
     dataStruct newPlayerStats[500]; 
     int counter = 0; 
     int otherCounter = 0; 
     ifstream inFile; 
     ifstream masterData("Master_Data.csv", ios:: in); 
     ifstream newStats("2014_League_Stats.csv"); 
     if (masterData.is_open()) { 
      while (!masterData.eof()) { 
       getline(masterData, playerStats[counter].playerId, ','); 
       getline(masterData, playerStats[counter].firstName, ','); 
       getline(masterData, playerStats[counter].lastName, ','); 
       getline(masterData, playerStats[counter].division, ','); 
       getline(masterData, playerStats[counter].team, ','); 
       masterData >> playerStats[counter].plateAppearances; 
       masterData.ignore(','); 
       masterData >> playerStats[counter].atBats; 
       masterData.ignore(','); 
       masterData >> playerStats[counter].singles; 
       masterData.ignore(','); 
       masterData >> playerStats[counter].doubles; 
       masterData.ignore(','); 
       masterData >> playerStats[counter].triples; 
       masterData.ignore(','); 
       masterData >> playerStats[counter].homeRuns; 
       masterData.ignore(','); 
       masterData >> playerStats[counter].sackFlys; 
       masterData.ignore(','); 
       masterData >> playerStats[counter].walks; 
       masterData.ignore(','); 
       masterData >> playerStats[counter].hitByPitch; 
       masterData.ignore(','); 
       masterData >> playerStats[counter].battingAvg; 
       masterData.ignore(','); 
       masterData >> playerStats[counter].onBasePercentage; 
       masterData.ignore(','); 
       masterData >> playerStats[counter].slugginPercentage; 
       masterData.ignore(','); 
      } 
     } else { 
      cout << "Error Reading File" << endl; 
     } 
     if (newStats.is_open()) { 
      while (!newStats.eof()) { 
       getline(newStats, newPlayerStats[otherCounter].playerId, ','); 
       getline(newStats, newPlayerStats[otherCounter].firstName, ','); 
       getline(newStats, newPlayerStats[otherCounter].lastName, ','); 
       getline(newStats, newPlayerStats[otherCounter].division, ','); 
       getline(newStats, newPlayerStats[otherCounter].team, ','); 
       newStats >> newPlayerStats[otherCounter].plateAppearances; 
       newStats.ignore(','); 
       newStats >> newPlayerStats[otherCounter].atBats; 
       newStats.ignore(','); 
       newStats >> newPlayerStats[otherCounter].singles; 
       newStats.ignore(','); 
       newStats >> newPlayerStats[otherCounter].doubles; 
       newStats.ignore(','); 
       newStats >> newPlayerStats[otherCounter].triples; 
       newStats.ignore(','); 
       newStats >> newPlayerStats[otherCounter].homeRuns; 
       newStats.ignore(','); 
       newStats >> newPlayerStats[otherCounter].sackFlys; 
       newStats.ignore(','); 
       newStats >> newPlayerStats[otherCounter].walks; 
       newStats.ignore(','); 
       newStats >> newPlayerStats[otherCounter].hitByPitch; 
       newStats.ignore(','); 
       newStats >> newPlayerStats[otherCounter].battingAvg; 
       newStats.ignore(','); 
       newStats >> newPlayerStats[otherCounter].onBasePercentage; 
       newStats.ignore(','); 
       newStats >> newPlayerStats[otherCounter].slugginPercentage; 
       newStats.ignore(','); 
      } 
     } else { 
      cout << "Error Reading File" << endl; 
     } 
     if (inFile.is_open()) { 
      while (!masterData.eof()) { 
       playerStats[counter].atBats = (playerStats[counter].plateAppearances + 
        newPlayerStats[otherCounter].plateAppearances) - 
        ((playerStats[counter].walks + newPlayerStats[otherCounter].walks) + 
        (playerStats[counter].hitByPitch + newPlayerStats[otherCounter].hitByPitch) + 
        (playerStats[counter].sacrifices + newPlayerStats[otherCounter].sacrifices)); 
       playerStats[counter].hits = ((playerStats[counter].singles + newPlayerStats[otherCounter].singles) + 
        (playerStats[counter].doubles + newPlayerStats[counter].doubles) + 
        (playerStats[counter].triples + newPlayerStats[otherCounter].triples) + 
        (playerStats[counter].homeRuns + newPlayerStats[otherCounter].homeRuns)); 
       playerStats[counter].battingAvg = ((playerStats[counter].hits)/((playerStats[counter].atBats))); 
       playerStats[counter].onBasePercentage = ((playerStats[counter].hits) + 
        (playerStats[counter].hitByPitch) + newPlayerStats[otherCounter].hitByPitch) + 
        (playerStats[counter].walks + newPlayerStats[otherCounter].walks)/
        ((playerStats[counter].atBats) + (playerStats[counter].walks + newPlayerStats[otherCounter].walks) + 
        (playerStats[counter].hitByPitch) + newPlayerStats[otherCounter].hitByPitch) + 
        (playerStats[counter].sacrificeFlys); 
       playerStats[counter].slugginPercentage = (playerStats[counter].hits/playerStats[counter].atBats); 
       masterData.close(); 
       newStats.close(); 
      } 
     } 
    } 
} 
+1

http://stackoverflow.com/questions/15937707/error-message-cannot-find-or-open-the-pdb-file – 0x499602D2

+0

Можете ли вы переформатировать свой код, чтобы он читался для чтения? Кроме того, очень нужен вопрос: пытались ли вы использовать ваш отладчик для поиска проблемы? – KillaBytes

+0

@kozmik да, когда я нажимаю, чтобы отлаживать его, запускается через программу, открывается черный экран с ничем на нем, а затем, когда я выхожу из черного экрана внизу, он говорит, что он не может найти или открыть файл – Kathy

ответ

0

Хорошо, давайте начнем с основ и перейдем оттуда. Поскольку у меня нет копии вашего CSV-файла, я сделаю некоторые предположения, когда вы читаете информацию, но большинство из этих исправлений относится к тому, как мы читаем из файла на C++.

Я понимаю, большинство из этих исправлений будет только от редактирования вашего поста, но я ничего не принимать на веру:

include iostream, // should be #include <iostream> - no comma. 
include string, // same here #include <string> - no comma. 
include fstream, // ditto. 

Ваших скобки также главная забота для того, чтобы даже скомпилировать этот код вы используете скобки свободно где они не принадлежат или не должны принадлежать. Просто избавьтесь от дополнительных скобок, и с вами все будет в порядке.

int main() { 
string playerId = "", 
lastName = "", 
firstName = "", 
division = "", 
team = ""; 
double plateAppearances = 0, 
atBats = 0, 
singles = 0, 
doubles = 0, 
triples = 0, 
homeRuns = 0, 
sackFlys = 0, 
walks = 0, 
hitByPitch = 0, 
battingAvg = 0, 
onBasePercentage = 0, 
slugginPercentage = 0; { // Why is this here? 
    dataStruct playerStats[500]; 
    dataStruct newPlayerStats[500]; 

Давайте посмотрим, как будет читать из файла:

if (inFile.is_open()) { 
     while (!masterData.eof()) { 
      playerStats[counter].atBats = (playerStats[counter].plateAppearances + 
       newPlayerStats[otherCounter].plateAppearances) - 
       ((playerStats[counter].walks + newPlayerStats[otherCounter].walks) + 
       (playerStats[counter].hitByPitch + newPlayerStats[otherCounter].hitByPitch) + 
       (playerStats[counter].sacrifices + newPlayerStats[otherCounter].sacrifices)); 
      playerStats[counter].hits = ((playerStats[counter].singles + newPlayerStats[otherCounter].singles) + 
       (playerStats[counter].doubles + newPlayerStats[counter].doubles) + 
       (playerStats[counter].triples + newPlayerStats[otherCounter].triples) + 
       (playerStats[counter].homeRuns + newPlayerStats[otherCounter].homeRuns)); 
      playerStats[counter].battingAvg = ((playerStats[counter].hits)/((playerStats[counter].atBats))); 
      playerStats[counter].onBasePercentage = ((playerStats[counter].hits) + 
       (playerStats[counter].hitByPitch) + newPlayerStats[otherCounter].hitByPitch) + 
       (playerStats[counter].walks + newPlayerStats[otherCounter].walks)/
       ((playerStats[counter].atBats) + (playerStats[counter].walks + newPlayerStats[otherCounter].walks) + 
       (playerStats[counter].hitByPitch) + newPlayerStats[otherCounter].hitByPitch) + 
       (playerStats[counter].sacrificeFlys); 
      playerStats[counter].slugginPercentage = (playerStats[counter].hits/playerStats[counter].atBats); 
      masterData.close(); // You close the file in your while loop 
      newStats.close(); // You close the file in your while loop 
     } 
    } 

Вы закрываете оба файла в цикле в то время, когда вы собираете информацию. Поэтому давайте скажем, что masterdata имеет информацию, которую вы хотите прочитать, до конца файла - вы закрываете ее после завершения первой последовательности сбора информации внутри цикла while. Возьмите код masterData.close(); И newStats.close(); из ваших инструкций while и if и поместите их прямо перед выходом из main.

Это приводит меня к моему другому комментарию. Главное должно что-то вернуть при успешном завершении программы. (т.е. return 0; OR return EXIT_SUCCESS;).

Смежные вопросы