3

否定が発生するまで、ユーザーが数字を入力できるようにするプログラムを作成しようとしています(最大エントリ> 10 ^ 6)。多くのバージョンを試しましたが、負の値が入力されたことを登録しないか、クラッシュします。

これは私が現在いる場所です:

#include <stdio.h>

#define HIGHEST 999999
int main(){
    int i=0, entry, sum=0;
        while(i<HIGHEST){
            scanf("%i", entry);
            if(entry>0){
                sum+=entry;
            }
            else{
            i=HIGHEST;  
            }
        i++;
    }
    printf("Sum: %i", sum);
    system("pause");
}
4

2 に答える 2

3

あなたの問題はこの行にあります:

scanf("%i", entry);

次のようになります。

scanf("%i", &entry);

スキャンした値を格納する整数変数のアドレスを渡す必要があります。エントリは初期化されていないため、入力された値ではなく、ガベージ/メモリ内にあるものでいっぱいになります。このリファレンスを参照してください。

  "Depending on the format string, the function may expect a sequence of additional arguments,     
  each containing a pointer to allocated storage where the interpretation of the extracted 
  characters is stored with the appropriate type"
于 2013-11-09T23:05:12.377 に答える
0

入力した数値が大きすぎる場合に退出する方法を提供します。

while(i<HIGHEST){  

ただし、0 未満の場合は何も残せません。これを試して:

while((i<HIGHEST)&&(i>=0)){  

さらに、@OldProgrammerは正しいscanf()です。彼が指摘したとおりにする必要があります。

于 2013-11-09T23:06:18.150 に答える