前提・実現したいこと
標準入力から与えられた数が、"完全数" "ほぼ完全数" "そのほか"のどれか判別するコードを書きたいと
思っています。
①判別する数がいくつあるのかをまず受け取り
②その後に判別する数を打ち込み
③それを判別する。
という流れです。
そのうえで、コード内で問題のある行に特に配列の定義などに問題が生じているようで手詰まりとなりました。
この場合配列(number)をどのように定義すべきでしょうか。
初心者で至らない点も多いとは思いますがよろしくお願いします。
発生している問題・エラーメッセージ
C99のエラー
再定義エラー(ローカル変数ではないのか)
おそらく20行目の配列定義がまずいかもしれない
エラーメッセージ [vagrant@localhost C.lesson]$ gcc kanzensu.c -o kanzensu kanzensu.c: In function ‘main’: kanzensu.c:18: error: ‘for’ loop initial declarations are only allowed in C99 mode kanzensu.c:18: note: use option -std=c99 or -std=gnu99 to compile your code kanzensu.c:24: error: ‘for’ loop initial declarations are only allowed in C99 mode kanzensu.c:26: error: invalid operands to binary % (have ‘int *’ and ‘int’) kanzensu.c:35: error: redefinition of ‘i’ kanzensu.c:18: note: previous definition of ‘i’ was here kanzensu.c:35: error: ‘for’ loop initial declarations are only allowed in C99 mode kanzensu.c:39: 警告: ポインタと整数との比較を行なっています kanzensu.c:43: 警告: ポインタと整数との比較を行なっています kanzensu.c:43: 警告: ポインタと整数との比較を行なっています
該当のソースコード
C言語 include <stdio.h> int main(void) { char str[1000]; int k;//`回数` int sum; int number[100]; //`要素の数` fgets(str, sizeof(str), stdin); sscanf(str, "%d" , &k); //`13行` for(int i = 0; i < k; i++) //`17行` { fgets(str, sizeof(str), stdin); sscanf(str,"%d", number[i]); //`20行` for(int j = 0; j < k; j++) //`23行` { if(number % j == 0) { sum = sum + j; } } } for(int i = 0; i < k; i++) //`再定義エラー?` { if(sum == number) { printf("perfect"); //`完全数` } else if(sum == number - 1 || sum == number + 1) { printf("nearly"); //`ほぼ完全数` } else { printf("neither"); //`どちらでもない` } } return 0; }
試したこと
scanfを使ってみたが結果が同じでした
一つの要素入力ではできましたが、
いくつ要素を比較するかは
入力者に依存するため
配列定義の仕方がわかりませんでした。
補足情報(FW/ツールのバージョンなど)
Atom1.45.0
Windows10
回答2件
あなたの回答
tips
プレビュー