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

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

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

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

3回答

375閲覧

C言語だとコンパイルエラーになります。

SPKUMA

総合スコア11

C

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

1グッド

1クリップ

投稿2019/06/25 01:44

Rubyでは期待通りの出力できたのですが、C言語では考え通りにはならないです。

Rubyで作成したものと、C言語で作成したものを
下記の通り添付致しますので、ご確認の程よろしくお願い致します。
ーーーーーーーーーーーーーーーーーーーーーーーーー
■問題
setup i a ・・・ 変数iに値 a を代入する (i=1,2)
addition a・・・ 変数1の値 +a を計算し、計算結果を変数 2 に代入する
subtract a・・・ 変数1の値 -a を計算し、計算結果を変数 2 に代入する

■入力例
4
setup 1 20
setup 2 40
addition 40
subtract -20

■期待出力例
20
40
ーーーーーーーーーーーーーーーーーーーーーーーーー

Ruby

t = gets.to_i a=0,0 t.times{ ary = gets.chomp.split(' ') if ary[0] == "setup" s = ary[1].to_i n = ary[2].to_i a[s-1] = n elsif ary[0] == "addition" x = ary[1].to_i a[1] = a[0] + x elsif ary[0] == "subtract" y = ary[1].to_i a[1] = a[0] - y end } puts a.join(' ')

C

#include<stdio.h> int main(void){ int *ary[3]; int *a[2]; int t; scanf("%d",&t); for(int j=0; j<t; j++) { if(ary[0] == "setup") { int s = ary[1]; int n = ary[2]; n = a[s-1]; } else if(ary[0] == "addition") { int x = ary[1]; a[1] =(a[0] + x); } else if(ary[0] == "subtract") { int y = ary[1]; a[1] =(a[0] - y); } } printf("%d\n",a); return 0; }
DrqYuto👍を押しています

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

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

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

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

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

maisumakun

2019/06/25 01:45

どのようなコンパイルエラーが出たのでしょうか。
cateye

2019/06/25 01:47

int *ary[3]; int *a[2]; これって、intのポインタの配列ですが、合っていますか?
SPKUMA

2019/06/25 01:48

@maisumakun 様 コメントありがとうございます。 コンパイルエラーは下記の通りです。 Main.c:12:19: warning: result of comparison against a string literal is unspecified (use strncmp instead) [-Wstring-compare] if(ary[0] == "setup") { ^ ~~~~~~~ Main.c:12:19: warning: comparison of distinct pointer types ('int *' and 'char *') [-Wcompare-distinct-pointer-types] if(ary[0] == "setup") { ~~~~~~ ^ ~~~~~~~ Main.c:13:17: warning: incompatible pointer to integer conversion initializing 'int' with an expression of type 'int *'; dereference with * [-Wint-conversion] int s = ary[1]; ^ ~~~~~~ * Main.c:14:17: warning: incompatible pointer to integer conversion initializing 'int' with an expression of type 'int *'; dereference with * [-Wint-conversion] int n = ary[2]; ^ ~~~~~~ * Main.c:15:15: warning: incompatible pointer to integer conversion assigning to 'int' from 'int *'; dereference with * [-Wint-conversion] n = a[s-1]; ^ ~~~~~~ * Main.c:17:24: warning: result of comparison against a string literal is unspecified (use strncmp instead) [-Wstring-compare] else if(ary[0] == "addition") { ^ ~~~~~~~~~~ Main.c:17:24: warning: comparison of distinct pointer types ('int *' and 'char *') [-Wcompare-distinct-pointer-types] else if(ary[0] == "addition") { ~~~~~~ ^ ~~~~~~~~~~ Main.c:18:17: warning: incompatible pointer to integer conversion initializing 'int' with an expression of type 'int *'; dereference with * [-Wint-conversion] int x = ary[1]; ^ ~~~~~~ * Main.c:21:24: warning: result of comparison against a string literal is unspecified (use strncmp instead) [-Wstring-compare] else if(ary[0] == "subtract") { ^ ~~~~~~~~~~ Main.c:21:24: warning: comparison of distinct pointer types ('int *' and 'char *') [-Wcompare-distinct-pointer-types] else if(ary[0] == "subtract") { ~~~~~~ ^ ~~~~~~~~~~ Main.c:22:17: warning: incompatible pointer to integer conversion initializing 'int' with an expression of type 'int *'; dereference with * [-Wint-conversion] int y = ary[1]; ^ ~~~~~~ * Main.c:26:19: warning: format specifies type 'int' but the argument has type 'int **' [-Wformat] printf("%d\n",a); ~~ ^ 12 warnings generated.
SPKUMA

2019/06/25 02:24 編集

@cateye 様 ご指摘ありがとうございます。
guest

回答3

0

ベストアンサー

ぼろぼろです。Cでプログラムを書きたければ、Cを勉強しましょう。特に、文字列の扱い方。

aryが文字列を格納できる領域では無い
aが整数を格納できる領域では無い
aryに入力していない
・文字列の比較は、if(!strcmp(変数,"比較文字列")){ 一致のときの処理;}
forの括弧内で変数宣言はできない
・文字列と整数は自動的に変換されない(これはRubyもですが)
・まだあるかと

Cの文法の話では無いですが、
setupの処理が意味不明

投稿2019/06/25 02:30

otn

総合スコア84555

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

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

0

・ary, aはintポインタの配列になっている。
・aryに値が代入されていない。

投稿2019/06/25 01:54

kasa0

総合スコア578

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

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

0

if(ary[0] == "setup")
cでは文字列の直接比較は出来ません。
strcmp()などを使いましょう。

投稿2019/06/25 01:50

cateye

総合スコア6851

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

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

cateye

2019/06/25 02:07

文字列は、終端記号(\0)を持った文字の配列です。従って、文字列のコピーやら比較等は関数(標準ライブラリ)を使います。参考:http://www.c-tipsref.com/
SPKUMA

2019/06/25 02:18

コメントありがとうございます。 Strcmp() で修正してみましたが、どうでしょうか?
SPKUMA

2019/06/26 06:02 編集

--
cateye

2019/06/25 02:37 編集

strcmp()の仕様を確認しましたか?・・・そのためにリンク貼ったんですが? →http://www.c-tipsref.com/reference/string/strcmp.html
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問