1

我正在制作一个简单的程序,它读取文件和用户的值,然后计算该值在文件中出现的次数。到目前为止,我已经做到了,它编译得很好,但是当你输入一个数字时,那里什么也没有发生。我难住了。对不起,如果这是非常基本的,但我无法超越这一点。

这就是我到目前为止所拥有的。

#include <stdlib.h>
#include <iostream>
#include <fstream>

using namespace std;

int hold,searchnumber, counter=0;

int main()
{ 

cout << "This program reads the contents of a file to discover if a number you enter exists in it, and how many times. \n";
cout << "What number would you like to search for? \n";
cout << "Number : ";
cin  >> searchnumber;

ifstream infile("problem2.txt");
if(!infile)
{
    cout << "Can't open file problem2.txt";
    exit(EXIT_FAILURE);
}
int sum=0,number;
infile >> number;
while (!infile.eof())
{
    if (number == searchnumber); 
    counter = counter += 1;
}
{
    cout << "The number " <<searchnumber << " appears in the file " << counter <<" times! \n";
    cin >> hold;
}

infile.close();
}
4

4 回答 4

4

本节包含两个问题:

infile >> number;
while (!infile.eof())
{
    if (number == searchnumber); 
    counter = counter += 1;
}

条件是真或假,while如果它是真的,它会永远保持下去,这很可能是“什么都没有发生”的原因。循环中没有任何东西可以改变 infile 的状态。

将前两行合并为:

while (infile >> number)

然后,您至少运行该文件。

现在,这个:

    if (number == searchnumber); 
    counter = counter += 1;

由于 if 语句后有一个分号,因此您基本上是在说“如果它是正确的数字,则不执行任何操作”,然后无论您是否找到该数字都更新计数器。删除分号。

像往常一样,写得太多太慢。

于 2013-04-19T14:33:49.057 回答
1

您在这一行有一个无限循环:

while (!infile.eof())
{
    if (number == searchnumber); 
    counter = counter += 1;
}

您打开文件并读取它上面的行,但是这个循环只会继续直到您点击 eof,但是由于您没有读取任何其他内容,只要您进入循环时它不是 eof,它就永远不会退出.

于 2013-04-19T14:31:03.093 回答
0
infile >> number;
while (!infile.eof())
{
  if (number == searchnumber); 
     counter = counter += 1;  
}

应该

while (infile >> number)
{
   if (number == searchnumber)
     counter += 1;
}

每次比较之前,您都需要从文件中读取一个数字。不是简单地在文件读取while循环中什么都不做。

顺便说一句:你sum的变量似乎没有使用,删除它。

于 2013-04-19T14:31:10.110 回答
0

1.

if (number == searchnumber); 
    counter = counter += 1;

应该

if (number == searchnumber) 
    counter = counter += 1;

2. sum未使用。

于 2013-04-19T14:33:18.887 回答