ここから本文です

C言語初心者です.セグメントエラーで前に進めません... nを入力したらフィボナッ...

chi********さん

2018/2/1902:18:49

C言語初心者です.セグメントエラーで前に進めません...
nを入力したらフィボナッチ数列F(n)を返してくれるようなプログラム目指して作ってみたのですがセグメントエラーがでて正しく計算できません.どこが悪いので

しょうか.

> gcc -o 001 001.c
> ./001
何項目かを入力
3
セグメントエラー


#include <stdio.h>

int main(void)
{
int i,n,m,a=1,b=1;

printf("何項目かを入力\n");
fflush(0); /*バッファにためている分を出力*/
scanf("%d\n", n);

if (n==1) printf("%d\n", a);
else if (n==2) printf("%d\n", b);
else {
m = ( n - 1 ) / 2;

for (i = 1; i<=m; i++){
a = a + b;
b = a + b;
}
if (n % 2 == 1) printf("%d\n", a);
if (n % 2 == 0) printf("%d\n", b);
}

return 0;
}

閲覧数:
56
回答数:
2

違反報告

ベストアンサーに選ばれた回答

rhi********さん

2018/2/1903:44:19

/*
2018/2/19 02:18:49 chissoraさん

C言語初心者です.セグメントエラーで前に進めません...
nを入力したらフィボナッチ数列F(n)を返してくれるようなプログラム
目指して作ってみたのですが
セグメントエラーがでて正しく計算できません.
どこが悪いのでしょうか.

> gcc -o 001 001.c
> ./001
何項目かを入力
3
セグメントエラー

*/
// Visual C++ 2013
#define _CRT_SECURE_NO_WARNINGS // microsoft の場合必要

#include <stdio.h>

int main(void)
{
int i,n,m,a=1,b=1;

printf("何項目かを入力\n");
fflush(0); /*バッファにためている分を出力*/
scanf("%d",&n);
// 説明:*************************************************
// scanf("%d\n", n);
// 受け入れる変数nは、引数でそのアドレス &n を渡す
// nを渡したので、そのときnに入っていた値(トンデモナイ値)
// をnのアドレスとおもってコンパイルし、セグメントエラー
// を起こしたのです。&n とすれば nのアドレスをあらわしてくれ、
// 末尾の結果になります。
// 尚、%dの次の\nは不要です。
// *******************************************************
if (n==1) printf("%d\n", a);
else if (n==2) printf("%d\n", b);
else {
m = ( n - 1 ) / 2;

for (i = 1; i<=m; i++){
a = a + b;
b = a + b;
}
if (n % 2 == 1) printf("%d\n", a);
if (n % 2 == 0) printf("%d\n", b);
}

return 0;
}
/* STDOUT:
何項目かを入力
3
2
続行するには何かキーを押してください . . .
*/

質問した人からのコメント

2018/2/24 21:43:21

そういうことだったんですね...ありがとうございました!!!!

ベストアンサー以外の回答

1〜1件/1件中

hik********さん

2018/2/1902:30:13

#include <stdio.h>

int main(void)
{
int i,n,m,a=1,b=1;

printf("何項目かを入力\n");
fflush(0); /*バッファにためている分を出力*/ //不要 数値入力の場合バッファには何も残りません
scanf("%d\n", n); // \nは不要 変換演算子が%s以外のときは変数の頭に&を付ける

if (n==1) printf("%d\n", a);
else if (n==2) printf("%d\n", b);
else {
m = ( n - 1 ) / 2;

for (i = 1; i<=m; i++){
a = a + b;
b = a + b;
}
if (n % 2 == 1) printf("%d\n", a);
if (n % 2 == 0) printf("%d\n", b);
}

return 0;
}

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる