0

私は自分のcプログラムのプライムテストをハックしようとしています。残念ながら、私は本当に問題にぶつかり、輪になってしまいます。

この式を使用する:

これは私の完全なコードです

int prim(int x)
{
 int i,j;
 for(i=x;i>0;i--)
 {
  if(x%i==0 && i=!x)
  {
   printf("%i no prime %i",x);
  }
 }
}  

このエラーが発生します:10 D:\ C \ L2\main.c割り当てに無効な左辺値

なぜこれが起こっているのか分かりません。ヘルパーはいますか?

4

8 に答える 8

3

ええ、あなたは演算子をややひどく混同しています。

これを試して:

if((x%i) == 0 && i != x)

角かっこは、モジュロが=====>比較、==>割り当て)と比較する前に最初に実行されることを確認します。

少し説明:

まず、代入演算子(シングル=)を使用しました。つまり、「0」の値を取得してx%iに割り当てるようにコンピューターに指示しました。ただし、x%iは変数ではなく、方程式です。それはあなたのコンパイラが不平を言ったことです。'無効な左辺値'->'方程式マークの左側の値に割り当てることはできません'。他のエラーでは、あなたは物事の順序を混同しました。'!' マークは「NOT」を意味します。だから私は等しくないxです。あなたが書いたのは:i EQUALNOTx。それは実際には機能している可能性がありますが、ほとんどの場合、望ましい結果は得られません。(NOT変数はそれを反転させるので)。

invertこの文脈では、それは数のすべてのゼロを取り、それらを切り替えることを意味します。1000 0001(unsigned char)があるとすると、反転後は01111110になります。

于 2013-03-11T16:18:00.853 に答える
2

完全なコードに基づくと、問題は次のとおりです。

1)エラー:あなたは!=後ろ向きです。これはと同じではありません=!

if(x%i==0 && i!=x)  // this is correct

2)警告:printfに2つの変数を出力するように指示していますが、1つだけを指定しています:

printf("%i no prime",x);  // this is correct

3)警告:関数がintを返すようにマークされていますが、何も返されません:

void prim(int x)  // this is correct
于 2013-03-11T16:17:49.033 に答える
2
if(x%i=0 && i=!x)

あなたが欲しい:

if (((x % i) == 0) && (i != x))

他のいくつかのこと:

1つが除数であるかどうかをテストしますが、これは常にです。

なぜxそれをテストするだけで始めるのですか?でループを開始しx-1、テストの半分を削除してみませんifか?

あなたはをprim返すと言いますintが、そうではありません。

于 2013-03-11T16:17:53.413 に答える
1

いつもの。平等チェックではなく、条件に割り当てがあります。

代わりにこれを試してください:

if(x%i == 0 && i!=x)

また、余計なものですが、かっこを多く使います(とても助かります)

if( (x%i == 0) && (i!=x) )
于 2013-03-11T16:17:39.337 に答える
1

コードを注意深く確認してください。あなたはx%1 = 0それがあるべきときに持っています==

于 2013-03-11T16:18:00.783 に答える
1

if(x%i==0 && i!=x)これを使って

=は代入演算子で==あり、比較演算子です

=!と置き換えます!=

于 2013-03-11T16:18:04.600 に答える
1

ここにはいくつかの問題があります。

  1. C==では等価性チェックに使用されますが、=どちらが割り当てであるかを使用しています。
  2. 不等式(等しくない)!==!

したがって、コードは次のようになります

if (x % i == 0 && i != x) { 

}
于 2013-03-11T16:18:24.660 に答える
0
int prim(int x)
{
 int i,j;
 for(i=x;i>0;i--)
 {
  if(x%i==0 && i=!x)
  {
   printf("%i no prime %i",x);  // Error 1
  }
 }
} 

(エラー1:1つの変数xで2つの整数値を出力しようとしています。

%iに別のxを指定するか、printfステートメントから%iを削除します。)

于 2013-03-12T10:43:37.357 に答える