

Always I am indebted.  
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

[code]

    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(' ')
    
    
    
[/code]

C

[code]

    #include<stdio.h>
    #include <string.h>
    
    int main(void){
    
        char ary[3];
        int a[2];
        char t;
        scanf("%s",&t);
    
        for(int j=0; j<t; j++) {
            if(strcmp(t,"setup")==0) {
                int s = ary[1];
                int n = ary[2];
                n = a[s-1];
            } 
            else if(strcmp(t,"addition")==0) {
                int x = ary[1];
                a[1] =(a[0] + x);
            } 
            else if(strcmp(t,"subtract")==0) {
                int y = ary[1];
                a[1] =(a[0] - y);
            }
        }
        printf("%d\n",a);
        return 0;
    }
    
[/code]


CC BY-SA 4.0
2019-06-24T06:39:50.327
56055
2019-06-25T03:12:28.200
2019-06-25T03:12:28.200
34810
34810
question
ruby c
C言語だとコンパイルエラー（ポインタの使い方がよろしくない...？）


回答になっていませんが、コメント欄に書くには長すぎるので回答欄を使います。  
大きい誤りは３点。

[c](/questions/tagged/c "'c' のタグが付いた質問を表示") においては実は文字列という型はありません（
[c++](/questions/tagged/c%2b%2b "'c++' のタグが付いた質問を表示") ならあるんですが）。
[c](/questions/tagged/c "'c' のタグが付いた質問を表示") で文字列を扱うには「 `char` の配列」を使います。提示
[c](/questions/tagged/c "'c' のタグが付いた質問を表示") ソースは「 `char`
へのポインタ」型が文字列であるかのごとくに誤解があり要修正です（配列とポインタは同じように使えてしまいますが全く違うもの）。配列の大きさは配列定義時点で決まってしまう、というか、決めなきゃならない仕様なので「任意長の文字列を読み込む」（実行時点で文字数が動的に変化する）ことは簡単にはできないのです。そのため、最大
`N` 文字の文字列を読み込む、で代用するしかありません（ないしは動的メモリ確保を使って任意長文字列を扱うか）。

更に [c](/questions/tagged/c "'c' のタグが付いた質問を表示") において `"setup"`
とソースコード上に書くと文字列リテラルになるのは良いのですが、式の値は「先頭文字へのポインタ右辺値」に変換されるという仕様なのです。そのため、文字列の一致比較は
`==` ではダメなんです。ユーザー入力を読み取った `char` 配列の先頭文字へのポインタ右辺値と、文字列リテラル `"setup"`
の先頭文字へのポインタ右辺値は、絶対に一致することはありません。なので `strcmp()` という関数を使え、という解説は
[c](/questions/tagged/c "'c' のタグが付いた質問を表示") の教科書には必ず載っています。

あと `ary` に文字列を読み込む部分が無いですよね。

以上３点を直すと動くわけですが、分量的には全面書き換えになってしまいます。オイラが書き換え後ソースコードを書いて提示してもいいんですけど、せっかくの演習ですしオイラの指摘事項を読んで修正し自己回答してみてください。
SO では自己回答は大いに歓迎されています。

んで、オイラのこの指摘事項が理解できないようなら入門書を買ったりするとよいでしょうね。


CC BY-SA 4.0
2019-06-25T02:38:42.853
56078
2019-06-25T02:38:42.853
8589
56055
answer