ページ 11

文字列の印字

Posted: 2010年9月06日(月) 10:08
by a
基本課題 12..1
fgets()関数を使って入力された英数字からなる文字列のうち、偶数番目の 文字だけを表示するプログラムを作成せよ。ただし,先頭文字を0番目とする.

% ./evenCharacters
文字列 (126字まで)? Ritsumeikan
偶数番目の文字: Rtuekn
%

という問題がわかりません
私が作ったソース↓

#include<stdio.h>

#define BUFFER_SIZE (126)

int main(void){
char buf[BUFFER_SIZE];
int i;
printf("文字列(126文字まで)? ");
fgets(buf,BUFFER_SIZE,stdin);
printf("偶数番目の文字: ");
for(i=0 ; buf='\n' && i<126 ; i++){
if(i%2==0 ){
printf("%c",buf);
}
else {}
}
printf("\n");
return 0;
}


このソースでコンパイルを通して実行ファイルを実行してみると
偶数番目の文字:□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
となります。
どこを直せばよいかわかる方おしえてください。

Re:文字列の印字

Posted: 2010年9月06日(月) 10:15
by Mist
> buf='\n'

!=ですね。
BCCだとワーニングで指摘してくれますけど。

Re:文字列の印字

Posted: 2010年9月06日(月) 10:16
by バグ
forループの判定文がおかしいです。
改行記号を代入しています。

Re:できたが・・・・

Posted: 2010年9月06日(月) 11:05
by a
おかげさまで!をつけることによってコンパイルは通りましたが、出力されるのがなぜか奇数番目の文字です。
if(i%2 != 0)にすることによって、正しく表示されるのですが、なぜそうなるのかわかりません。誰か教えてください。

Re:できたが・・・・

Posted: 2010年9月06日(月) 11:11
by fatens
>出力されるのがなぜか奇数番目の文字です。

先頭文字は0番目として扱いますが、それを踏まえた上で、奇数番目の文字が出力されますか?

Re:わかりました。

Posted: 2010年9月06日(月) 12:09
by a
よくよく考えてみると、i=0,1,2,3(=奇数、偶数、奇数、偶数)だからiが2で割れたら奇数ってことになるんですね。ありがとうございます。たすかりました。