ページ 11

空白削除

Posted: 2009年5月11日(月) 14:53
by 研修生
getcharで入力した文字列の中の空白を削除するプログラムについてうまくいかないのでご質問します
int main()
{
  char s[100];
  int c, i;
  for(i = 0; i< (c = getchar()) !=EOF && c != '\n'; ++i){
    if(c != ' ' || c!= '\t'){
      s = c;
     }
  }
   
  s = '\0';
  printf("%s", s);
  return 0;
}


と試しに組んでましたが、希望のプログラムにはいたらず空白削除が行なわれていません。
こちらとしては一文字ずつみていって空白かタブがなければsにいれるとしているつもりですが・・

Re:空白削除

Posted: 2009年5月11日(月) 15:05
by Blue
空白というかゴミが入っているような。
スキップしているのに、iを進めるとそこには何も入らないです。

Re:空白削除

Posted: 2009年5月11日(月) 15:09
by Mato
 Blueさんの通り、例えば空白が入力されたとき(このときを仮にIとする)を考えますと、sに何も代入が行われず、未定義状態のままになりますね。

Re:空白削除

Posted: 2009年5月11日(月) 15:12
by tutor
if(c != ' ' || c!= '\t')
この書き方だとcの中身が何であれif文に入るのではないでしょうか?

Re:空白削除

Posted: 2009年5月11日(月) 15:22
by tutor
こんな感じでいいんじゃない?

int main()
{
char s[100];
int c, i,j;

for(i = 0, j = 0; i< (c = getchar()) !=EOF && c != '\n'; ++i){
if(c != ' ' && c!= '\t')
s[j++] = c;
}

s[j] = '\0';
printf("%s", s);
return 0;
}

Re:空白削除

Posted: 2009年5月11日(月) 15:29
by 研修生
そういうことか・・ 理解できたと思います。
悪い点指摘していただいた方もサンプル提示していただいた方もありがとうございました。