質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

3回答

2332閲覧

Cの関数がわからないです。

tesllaria

総合スコア13

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2016/11/27 15:01

僕の友達が僕のノーパソを勝手に頂戴して↓のコードを書いていきました。
勝手に頂戴するなんて許せないです。
彼のノーパソをベンディングしてもいいですか?

という茶番はさておき、
聡明な先輩プログラマの方々に初心者な質問です

友達が書いたこのコード、関数を使ったものだと思うんですが馬鹿な自分はどういった仕組みなのかわかりません。

たしか変数bと変数aの値を足したものを出力するプログラミングだとおもうんですが・・・

関数の仕組みから、このコードの流れまでを初心者向けにわかりやすく説明してくれますか?

ちなみにこれをコンパイルしてコマンドプロンプトで実行したらで動作が停止しましたというエラーがでました。
修正したコードも教えてくれるとありがたいです。

C

1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4 5int tasu(int b,int a) 6{ 7 return b+a; 8} 9 10int main(int argc,char *argv[]) 11{ 12 int a=0; 13 int b=0; 14 int c=0; 15 if(argc==1){ 16 17 a=atoi(argv[1]); 18 b=atoi(argv[2]); 19 } 20 else 21 { 22 scanf("%d",&a); 23 scanf("%d",&b); 24 } 25 26 c=tasu(a,b); 27 28 29 printf("%d\n",c); 30 31 return 0; 32}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mugicya

2016/11/27 17:33

このレベルで質問って、空が青いのはなんで?って聞かれてるレベルなので、もーちょい喋れるようになってから質問してもらってもいいですか?
guest

回答3

0

お友達のプログラムには、誤りがある様です。

if(argc==1){

は、引数の数がargcに入りますが、上記では1個かと聞いていますが、実は引数は無しの意味となります。
(プログラム自身を1と数えるので) 例 ./a.out の時はargc==1です。
問題はこのケース時に下記の処理を行うのでエラーとなります。

a=atoi(argv[1]);

b=atoi(argv[2]);

argv[1]、argv[2]には何も入っていない状態ですのでエラーなります。コアダンプになるかも
if(argc==3)とするのが正しいと思われます。(友達は、故意にそうしたかもしれませんが)

他の部分は、ドットインストールや多くのサイトにて説明が有りますので参考としてください。

投稿2016/11/27 23:00

A.Ichi

総合スコア4070

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

超簡単に説明しますと・・・・
自作関数を作って、キーボードから数字を入力し、そのパラメータを足し合わせて結果を表示させている。
という感じですね。

int task()が自作関数ですね。
return b + a; は 「b+a の値を返す」という意味です。

c = tasu(a,b);
で return で返ってきた値が cに入ります。

関数に関する質問なので、printf や scanf などはわかりますよね??
出力と入力を行う標準関数ですね。
googleで調べれば、出てきます。

int main(int argc,char *argv[])この部分なんですが・・・・
これは実行する際にパラメータを受け取ります。

ですが、この部分はつけなくても良いかと思います。
int a=0;
int b=0;
scanf("%d",&a);
scanf("%d",&b);
このようにして
実行したら、適当な数字を2つ入力すると足し算をしてくれます。

もしくは、if(argc==3){ このように書き直せば、宜しいかと思いますね。

投稿2016/11/27 21:44

編集2016/11/27 23:53
strike1217

総合スコア651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

投稿2016/11/27 15:11

carimatics

総合スコア740

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問