-7

有人可以帮我弄清楚如何找到 1-100 之间的所有质数并将它们写入文件吗?

 #include<iostream>
 #include<fstream>            
 using namespace std;
 bool isPrime(int);
 int main()
 {
int iNum;
cout << "This program will calculate and store all the prime numbers between 1 and     

   100 "<<endl;
ofstream myfile( "writeto.txt" );

    for(int i = 1; i <= 100; i++)
    {
    isPrime(i);
    while(isPrime(i) == true)
        {
        myfile <<  i <<endl;
        break;

    }
    myfile.close();
return 0;
    }
 }

 bool isPrime(int iNum)
 {
 bool status;  
 if( iNum <= 1 )

 return false; 

  for( int i = 2; i < iNum; i++ ) 
 { 
     if( iNum % i == 0 ) 
         return false; 
  } 

 return true;

 }

我怎样才能让它工作?我已经为此工作了一段时间,并认为这与我的回归有关。我真的很迷茫,希望有人能帮助我。我不是在寻找答案,我只是希望有人指出我正确的方向。

4

3 回答 3

6

你的牙套好像放错了地方

        break;

    }
    myfile.close();
return 0;
    }
 }

应该

        break;

      }

    }
    myfile.close();
return 0;
 }

ps 而if不是whileThinTim 发现的,以及他提到的其他问题。但根据break声明,这是导致主要(双关语)问题的原因。

如果不是素数,您的大括号会导致您的程序在 1 个数字后退出,如果是,则挂起。

于 2013-09-18T01:30:08.883 回答
3

while应该是一个if.

你不需要那个break声明。

对循环内部的第一次调用isPrime什么也不做。

您应该在编写数字时将它们转换为字符。

正如 Karthik 提到的,您的括号未正确关闭。

在将问题发布到 StackOverflow 之前,您应该做更多的审查。

于 2013-09-18T01:30:12.373 回答
1
for(int i = 1; i <= 100; i++)
{
    isPrime(i);
    while(isPrime(i) == true)
    {
        myfile <<  i <<endl;
        break;

    }
    myfile.close();
    return 0;
}

返回0;会让你在第一个素数后退出程序......

正确的是

for(int i = 1; i <= 100; i++)
{
    if(isPrime(i)) {
        myfile <<  i <<endl;
    }
}
myfile.close();
return 0;
于 2013-09-18T01:33:06.067 回答