ページ 11

関数

Posted: 2009年5月25日(月) 14:33
by 研修生
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としているんですが
今みたらデクリメントされていない感じです。
原因だけ教えて下さい。

Re:関数

Posted: 2009年5月25日(月) 14:40
by Blue
ポインタってわかりますか?

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

Re:関数

Posted: 2009年5月25日(月) 14:41
by Mist
関数に渡される引数の性質を理解できていないことが原因です。
値渡しの場合、値のコピーがtabspace関数に渡されるので、tabspace関数内でnt,nbをいくら変化させてもmain関数内のnt,nbには反映されません。

Re:関数

Posted: 2009年5月25日(月) 14:52
by 研修生
そうか・・値のコピーが渡されているんですね。

Re:関数

Posted: 2009年5月26日(火) 10:29
by 研修生
理解できました。ありがとうございました。