c++ - 为什么这段代码不运行?

标签 c++ command-line

嘿,抱歉,如果这个问题被问了很多,但我不知道这里的问题是什么。

在下面的 C++ 代码中,我从用户定义的输入文件中读取数据并生成输出。我一直在一段一段地编写它,然后将它们放在一起、编译、测试等,以解决错误。这对我来说是一次学习经历,我猜是第一个自主项目......

无论如何,当我运行代码时,命令提示符打印一行并且没有响应。我会说它陷入了某种循环,但我相信那是不可能的。

我认为这可能与我要声明的数组有关,我想制作一个动态字符串数组,但我发现这很难...

#include <iostream>
#include <fstream>
#include <algorithm>
#include <cctype>
#include <string>
using namespace std;

int wordCount(string line)
{
    int fpos, fpos2; 
    int count = 0;
    fpos = line.find_first_not_of(' ');
    line.erase(0, fpos);

    while(line.size() > 0)
    {
        fpos = line.find_first_of(' ');
        if(line.at(0) == '"')
        {
            line.erase(0, 1);     
            for(int i = 0; i <line.size(); i++)
            if(line.at(i) == '"' && line.at(i-1) != '\\')
            {
                fpos2 = i;
                break;
            }
        line.erase(0, fpos2 + 2);
        }
            else
            line.erase(0, fpos + 1);
            count++;
    }


return count;
}

int main()
{
  //Current line; Input file; Output file;
string currentline, fileName, outFileName;

ifstream fin;
ofstream fout;

cout << "Enter input file name: ";
getline(cin, fileName);
cout << "Enter output file name: ";
getline(cin, outFileName);

fin.open(fileName.c_str());
if (!fin.good()) throw "I/O error";
fout.open(outFileName.c_str());
if (!fout.good()) throw "I/O error";
getline(fin, currentline);

while (!currentline.empty())
{

    int pos, pos1;


    pos = currentline.find("//");
    string postScript = currentline.substr(pos+2,-1);
    pos = currentline.find_first_of(';');
    string xline = currentline.substr(0,pos+1);
    cout << xline << endl;

    int size = wordCount(xline);
    string *words;
    words = (string *) malloc (size*sizeof(string));
    words = new string[size];
    pos = xline.find_first_not_of(' ');
    xline.erase(0, pos);        

    for ( int i = 0; i < size; i++ )
    {
        pos = xline.find_first_of(' ');
        if ( xline.at(0) == '"' )
        {
            xline.erase(0, 1);    
            for(int a = 0; a < xline.size(); a++) //This for loop finds the end of a quoted statement within the line.
                if ( xline.at(a) == '"' && xline.at(a-1) != '\\' )
                {
                    pos = a;
                    break;
                }
            words[i] = xline.substr(0,pos);
            xline.erase(0,pos + 2);
        }
        else
        {
            words[i] = xline.substr(0,pos);
            xline.erase(0,pos + 1);
        }
        cout << words[i] << endl;
    }
    cout << xline << endl << endl;

    getline(fin, currentline);
}

  return 0;
}

最佳答案

我建议您注释掉一些代码,直到它开始按您期望的方式工作(通常有问题的部分会以这种方式变得明显。)一旦您弄清楚哪里出了问题,您就可以在 StackOverflow 上提出更具体的问题。

关于c++ - 为什么这段代码不运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5386930/

相关文章:

Git 别名链添加、提交、 pull 、推送?

mysql - 是否可以在 mysql 中使用 "Index"作为列名

c++ - 软件电容

c++ - 尝试从字符串中获取 int 时出错

c++ - 在 C++ 中以长度指示器方式从二进制文件中读取

python - 如何将 python -c "code here"与换行符一起使用?

php - exec ("mysqldump") 返回 2 但该命令在命令行中工作

java - 与第三方命令行程序的提示交互与 Windows 命令提示有何不同?

c++ - 全局变量和类内部变量有什么区别?

c++ - 虚假 "missing sentinel in function call"