ページ 11

素数の判定プログラム

Posted: 2015年10月24日(土) 15:50
by Iseuma14
C言語勉強中のものです コンパイラは、iPhoneのアプリを使っています
ここまでの知識で何か作ってみようと思い入力された数が素数かどうかを判定するプログラムを作ってみたのですが、なぜか数字を入力だけが表示されて結果が表示されません
原因を教えてくださると嬉しいです

コード:

#include <stdio.h>
int nai();
int main()
{
  	int i;
  	int sosu;
  	
  printf ("数字を入力");
  	scanf ("%d\n",&sosu);
  	
  if (	sosu > 2 && sosu % 2 ==1)
  /*sosuが2以上、かつsosuが奇数の時ループ実行*/
  for (i=3;;i + 2)
  {
    	if (sosu % i == 0)
    		break;
   /*iで素数を割り切れたらループ終了*/
   }
  		 if (sosu == 1)
  		       int nai() ;
  		 if (sosu == 2)
  			printf (" 素数") ;
	if (sosu % 2 == 0)
		int nai();
			if (i ==sosu)
				printf ("素数");
	return 0;    	
}    	
    int nai()
  {
    printf("素数ではない");
   return 0;
  }
    	

Re: 素数の判定プログラム

Posted: 2015年10月24日(土) 16:09
by みけCAT
作る人 さんが書きました:なぜか数字を入力だけが表示されて結果が表示されません
本当ですか?ideoneおよびwandboxで実行を試みたところ、20行目でエラーが出てコンパイルが通りませんでした。
また、20行目のint nai() ;を {int nai() ;}に、24行目のint nai();を {int nai();}にそれぞれ書き換えて入力3で実行したところ、
「数字を入力素数」と表示されました。
作る人 さんが書きました:原因を教えてくださると嬉しいです
  • int nai();は関数の宣言とみなされて、関数呼び出しは起こらないと予想できる
  • ループ中でiが更新されないため、3以上(int型に収まる範囲)の奇数で、3の倍数ではない数を入力すると無限ループになる

Re: 素数の判定プログラム

Posted: 2015年10月24日(土) 17:07
by Iseuma14
みけCAT様 ご返信ありがとうございます
なんか改めて見直すと不備がいろいろ出てきたので出直させていただきます
ありがとうございました

Re: 素数の判定プログラム

Posted: 2015年10月24日(土) 19:01
by かずま
作る人 さんが書きました:なぜか数字を入力だけが表示されて結果が表示されません
原因を教えてくださると嬉しいです
scanf の書式の最後に '\n' を書いてはいけません。
scanf の書式の中の スペースやタブや改行は、入力の連続する 0個以上のスペースや
タブや改行を読み飛ばして、そうでない文字が出てくるまで入力を待ち続けます。

Re: 素数の判定プログラム

Posted: 2015年10月24日(土) 19:16
by Iseuma14
かずまさまご回答ありがとうございます
ほんとですね間違えて入れてました ありがとうございます