我的C++从文本文件读取的程序无法正常工作,但我没有看到任何代码错误?
My C++ program that reads from a text file won't work but I don't see any errors with code?
我编写了一些代码,可以从.txt文件中读取并将该文件中的任何内容显示为程序中的输出。我不知道为什么它不起作用。我在代码中没有看到任何错误。我还调试了程序,变量的所有值都是正确的。我正在使用带有g++编译器的IDE的Eclipse Luna。当程序正在运行并提示我输入数字 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;
}
}
}
我看到的主要问题是displayItems()
:
while(objectFile >> name >> power) {
这段代码如何知道name
在哪里结束,power
在哪里开始?
我建议将每个项目放在这样的一行上:
name
power
name
power
name
power
[and so on...]
然后,您可以使用getline()
函数一次获取一行。
此外,另一个大问题是您没有代码将字符串转换回双精度。计算机不会将其视为"12.56"。它将其视为"1"2"。"5"6"(即每个字符逐行)。
此问题使用以下代码解决此问题:
#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;
}
我建议再次检查您的代码,因为存在一些严重的格式问题,隐藏了其中的实际问题。例如,逐行浏览代码,您会发现当前代码只检查 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
格式化中间函数。这通常会让读者感到困惑,应该避免。选择一种格式并坚持下去(作为一般规则)。我敢打赌,如果您对"}"的位置进行故障排除,您会发现本教程更有可能为您工作。
希望对您有所帮助!
相关文章:
- 错误处理.将系统错误代码映射到泛型
- 为什么我在使用void函数时得到错误代码C2276
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- 逻辑运算符上出现错误代码 a')'
- 'val' Arduino 错误代码之前的预期'('
- 我在贪吃蛇游戏中收到了错误代码 -1073741571
- 根据 GetLastError 直接写入磁盘会导致错误代码 5
- 当我选择大于 720 的矩阵大小时,程序退出并显示错误代码.可能是什么原因?
- 创建进程 API 失败,在窗口 122 上出现错误代码 10
- 使用另一个函数调用一个函数(都在类中)时出现问题.没有错误代码C++
- 当命令失败时,gzip 会在 C++ 中返回错误代码吗?
- 从 C++ 调用 cURL 命令会返回意外的错误代码,如 1792 和 6656
- WSALookupServiceBegin() 上的错误代码 10022(无效的 arugment)
- C++ Schannel POST 400 错误代码错误请求
- openCL-创建子缓冲区返回错误代码13
- 更新了Runge-Kutta(RK4)C++错误代码中的二阶DE
- 获取有关使用未初始化内存的错误代码
- 排序程序的意外错误代码
- 正在将DJI错误代码记录到流中
- 来自API的错误代码..处理什么是好的做法