関数

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
研修生

関数

#1

投稿記事 by 研修生 » 16年前

int main(int argc, char* argv[/url])
{
  int c, nb, nt, pos;
  nb = 0;
  nt = 0;

  for(pos = 1;(c = getchar()) != EOF; ++pos){
    if(c == ' '){
       if((pos % TABSTOP) != 0){
          nb++;
       }
     
       else{
          nb = 0;
          nt++;
       }
    }
  
    else{
       tabspace(nt, nb); 
       putchar(c);
  
       if(c == '\n'){
          pos = 0;
       }
    }
  }

  return 0;
}

void tabspace(int nt, int nb)
{
   for(; nt > 0; --nt){
        putchar('\t');
   }
 
   for(; nb > 0; --nb){
      putchar(' ');
   }
}
で先程ご質問した際に載せたソースとの違いは
関数を使っているだけなんですが
このときtabspace関数内で
--ntや--nbとしているんですが
今みたらデクリメントされていない感じです。
原因だけ教えて下さい。

Blue

Re:関数

#2

投稿記事 by Blue » 16年前

ポインタってわかりますか?

参考)
引数による情報の受け渡し
http://homepage3.nifty.com/mmgames/c_guide/15-06.html

Mist

Re:関数

#3

投稿記事 by Mist » 16年前

関数に渡される引数の性質を理解できていないことが原因です。
値渡しの場合、値のコピーがtabspace関数に渡されるので、tabspace関数内でnt,nbをいくら変化させてもmain関数内のnt,nbには反映されません。

研修生

Re:関数

#4

投稿記事 by 研修生 » 16年前

そうか・・値のコピーが渡されているんですね。

研修生

Re:関数

#5

投稿記事 by 研修生 » 16年前

理解できました。ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る