ページ 11

無題

Posted: 2010年5月02日(日) 01:41
by リョウ
始めまして プログラム初心者のリョウといいます。
質問したいのは下の問題です。
キーボードから入力した整数を n とする。アルファベット順で英小文字 'a' から 数えて n 番目の文字を印字するプログラムを作成せよ。
% ./NthChar
Input integer: 9
The charater away from 'a' by 9 is 'j'.
%
この問題をとけと言われているのですが、ヒントや説明もなくてまずどうすればいいかわかりません。
教科書を見ても分からないので、どういう方法でプログラムすればいいか教えてくれないでしょうか?
osはlinuxです。

Re:無題

Posted: 2010年5月02日(日) 07:29
by ookami
こんにちは。作りかけのソースがあれば貼ってもらえると助言が集まりやすいと思いますよ。

無ければ以下の順でお答えください。

まず、コンパイラは何ですか?
次に、お約束の"Hello, World!" は印字できますか?
文字コードについて理解していますか?(printf("%c\n",65); の出力結果は分かりますか?)

Re:無題

Posted: 2010年5月02日(日) 13:56
by リョウ
コンパイラはちょっとわからないんですが、emacsを使っていてコンパイルするときは gcc -o を使っています。
印字するというのは、printf("Hello,World!")
これでいいですか?
文字コードは'e'が出力されると思います。

Re:無題

Posted: 2010年5月02日(日) 16:25
by ookami
それです。「gcc」がコンパイラの名前です。

Hello, World! はそれでOKです。

以下は惜しい。
printf("%c\n",0x65);なら 'e' が出力されます。
printf("%c\n",65);では 'A' です。
http://e-words.jp/p/r-ascii.html

上記のページにもある通り、ASCII文字コードの処理系ならば、

文字 文字コード
'a' 97
'b' 98
:
:
'j' 106
:
:

と並んでいます。例題では 9 を入力しており、'a'(97)に 9 足した 'j'(106) が印字されている、ということになります。

で、作りかけのものがあったら貼ってもらったほうが、回答が集まりやすいと思いますよ。

Re:無題

Posted: 2010年5月02日(日) 16:53
by たかぎ
一応作ってみました。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
fputs("Input integer:", stdout); fflush(stdout);
char s[2+1], c;
scanf("%2[0-9]%c", s, &c);
int i;
if (c != '\n' || (i = atoi(s)) >= 26)
return EXIT_FAILURE;

printf("The character away from 'a' by %d is '%c'.\n",
i, "abcdefghijklmnopqrstuvwxyz");
}

例によって、コメントなし、解説なしです。
自力で理解してください。

Re:無題

Posted: 2010年5月02日(日) 20:04
by リョウ
みなさん返信ありがとうございます。
おかげさまで理解できました!
どうもありがとうございます。
またわからないことがあれば質問すると思いますので
よろしければまたお願いいたします。