我编写了一些代码,这些代码可以从.txt文件中读取并显示该文件中的任何内容作为程序中的输出。我不知道为什么它不起作用。我没有在代码中看到任何错误。我还调试了程序,变量的所有值都是正确的。我使用Eclipse Luna作为带有g ++编译器的IDE。当程序运行并提示我输入数字1-3时,当我输入1 2或3时它没有做任何事情而且我不知道为什么。任何见解将不胜感激。谢谢!
#include <iostream>
#include <fstream>
using namespace std;
//function prototypes
int getWhatTheyWant();
void displayItems(int x);
//getWhatTheyWant function
int getWhatTheyWant(){
int choice;
cout << "\n 1 - just plain items" << endl;
cout << "2 - helpful items" << endl;
cout << "3 - harmful items" << endl;
cout << "4 - quit program \n" << endl;
cin >> choice;
return choice;
}
//displayItems function
void displayItems(int x){
ifstream objectFile("objects.txt");
string name;
double power;
if(x==1){
while(objectFile >> name >> power){
if(power==0){
cout << name << ' ' << power << endl;
}
if(x==2){
while(objectFile >> name >> power){
if(power>0){
cout << name << ' ' << power << endl;
}
if(x==3)
while(objectFile >> name >> power){
if(power<0){
cout << name << ' ' << power << endl;
}
}
}
}
}
}
}
//main function
int main(){
int whatTheyWant;
whatTheyWant = getWhatTheyWant();
while(whatTheyWant != 4){
switch(whatTheyWant){
case 1:
displayItems(1);
break;
case 2:
displayItems(2);
break;
case 3:
displayItems(3);
break;
}
}
}
答案 0 :(得分:0)
我看到的主要问题是displayItems()
:
while(objectFile >> name >> power) {
此代码如何知道name
结束和power
开始的位置?
我建议将每个项目放在这样的一行:
name
power
name
power
name
power
[and so on...]
然后,您可以使用getline()
函数,以及一次获取一行。
另外,另一个大问题是你没有代码将字符串强制转换为double。计算机并没有将其视为&#34; 12.56。&#34;它认为它是&#34; 1&#34; &#34; 2&#34; &#34;&#34; &#34; 5&#34; &#34; 6&#34; (即每个字符逐行)。
This question addresses this使用此代码:
#include <sstream>
int main(int argc, char *argv[])
{
double f = 0.0;
std::stringstream ss;
std::string s = "3.1415";
ss << s;
ss >> f;
cout << f;
}
答案 1 :(得分:0)
我建议再次检查您的代码,因为有一些严重的格式问题隐藏了其中的实际问题。例如,逐行浏览你的代码,你会看到你当前的代码只检查X == 1,因为你的其他if语句实际上是嵌套在另一个中,看起来更像是这样:
if(x==1)
{
while(objectFile >> name >> power)
{
if(power==0)
{
cout << name << ' ' << power << endl;
}
if(x==2){
while(objectFile >> name >> power)
{
if(power>0)
{
cout << name << ' ' << power << endl;
}
if(x==3)
while(objectFile >> name >> power)
{
if(power<0)
{
cout << name << ' ' << power << endl;
}
}
}
}
}
}
你现在看到代码有什么问题吗?正确格式化将大大提高您将来编码的能力。另外值得注意的是,您使用的是:
if(X==Y)
{
//Do Stuff
}
格式使用:
if(X==Y)
//Do Stuff
格式化mid功能。这通常会让读者感到困惑,应该避免。选择一种格式并坚持下去(作为一般规则)。如果您对自己的位置进行排查,我会愿意下注,您会发现该教程更适合您。
希望有所帮助!