Cのプログラムについて

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

Cのプログラムについて

#1

投稿記事 by レッド » 16年前

こんにちは。今、私は個人的に勉強しているのですが始めたばかりでよくわかりません。
下記の問題を友達にもらったのですが、解答もなく自分でもプログラムがわからなくて困っています。
下記の問題のプログラムを教えてください。よろしくお願いします。


・プログラム説明
文字列をキーボードより入力し、小文字なれば大文字に、大文字ならば小文字に変換して出力する。

・補足
aをAに変換するには
1.16進数の□を加える。(コード表をよく見る)
2.’A’-’a’の結果を加える。
3.関数 toupper を使用する。(ctype h を #include する)

・出力例
入力 ? abCDefGHijKLMnopQrStU
出力   ABcdEFghIJklmNOPqRsTu


です。補足の1,2,3、のどれを使ってもOKです。
プログラムを教えてください。よろしくお願いします。

たかぎ

Re:Cのプログラムについて

#2

投稿記事 by たかぎ » 16年前

処理系が不明です。(標準入力ではなく)キーボードからの入力内容を取得する一般的な方法はありません。

対象となる文字に制限がありませんが...

> 小文字なれば大文字に

例えば 'ß' が入力された場合、対応する大文字がないのですが、どうすればよいのでしょうか?

> 1.16進数の□を加える。(コード表をよく見る)
> 2.’A’-’a’の結果を加える。

処理系およびロケールを特定しない限り、1および2の方法は使えません。

> 3.関数 toupper を使用する。(ctype h を #include する)

特定ロケールで扱える文字集合だけを対象にすればよいのでしょうか?
その場合も処理系に関する情報が必須です。

レッド

Re:Cのプログラムについて

#3

投稿記事 by レッド » 16年前

始めたばかりなのでよくわからないです。
初心者なので単純にβとかの文字は使わないです。

たかぎ

Re:Cのプログラムについて

#4

投稿記事 by たかぎ » 16年前

> 始めたばかりなのでよくわからないです。

とりあえず、http://dixq.net/board/board.htmlを熟読してください。
一度読んで分からなければ、分かるまで(大きな声で)音読してください。

> 初心者なので単純にβとかの文字は使わないです。

'ß' であって、'β' ではありません。
また、(C言語の)初心者かどうかは関係なく、ドイツ語を扱うなら考慮すべき文字です。

問題の内容に関する質問は、出題した友達にふった方がよいかもしれませんね。

レッド

Re:Cのプログラムについて

#5

投稿記事 by レッド » 16年前

よくわからないので・・・
プログラムを教えてもらえませんか。
特定とかって言ってもわからないのでお願いします。勝手に特定してもらっても大丈夫です。

たかぎ

Re:Cのプログラムについて

#6

投稿記事 by たかぎ » 16年前

元の質問が消されてしまっては話になりませんね。

キャンパス

Re:Cのプログラムについて

#7

投稿記事 by キャンパス » 16年前

>たかぎ氏

そろそろ、「上から目線」の姿勢を改める方がよい。

だれからも指摘がないのをいいことに、
自分の技術力を誇示するためだけであるかのような
「回答してやるぜ。どうせ内容はわからんだろうけどな」
と受け取れる姿勢はいかがなものか。

たかぎ

Re:Cのプログラムについて

#8

投稿記事 by たかぎ » 16年前

> 「回答してやるぜ。どうせ内容はわからんだろうけど」

規約中の

> 「どこがわからないのか」
> 「自分はどこまでやったのか」
> 「結局何が行いたいのか」
> 「自分のC言語の知識はどの程度なのか」
> を明確にしてください。

を守っていない相手に対して、どうやったら「どうせ内容はわからんだろうけど」という判断ができるのか、まったく分かりません。
特に、「自分のC言語の知識はどの程度なのか」も明確ではないのですから、私よりずっと経験を積んだ方かもしれませんよね。

一応、規約では、

> ここではごくごく入門者の人を対象にしています。
> 専門家の方やマスターやドクターの人の質問等は対象としておりません。

とありますが、そもそも規約を読まない、守らない人が、これに従っているとは考えにくいですね。

Dixq (管理人)

Re:Cのプログラムについて

#9

投稿記事 by Dixq (管理人) » 16年前

レッドさん、質問文を消すのは規約違反行為です。
質問した事を先生に怒られたとか、
質問した内容から大学名がわかりそうだとか、
特別な理由がある時はその旨を示してください。

投稿された時点で投稿されたデータは自動的にバックアップがとられますので、
こちらに質問文は保存されています。
数時間以内に理由の提示がなければこちらで質問文を元に戻します。

また、私も常に掲示板をみているわけではないので、
せめて24時間は待ってもらえるとありがたいです。

プログラムは少しずつ考えたら必ずわかります。
皆さんのアドバイスをもとに一緒に少しずつ考えてみましょう。

tk-xleader

Re:Cのプログラムについて

#10

投稿記事 by tk-xleader » 16年前

もし単純にアルファベット(a~z)だけでいいのならば、小文字から大文字への変換関数はこんな感じになります。
#include<string.h>

char ToUpper(char ch)
{
	const char Lower[/url]="abcdefghijklmnopqrstuvwxyz";
	const char Upper[/url]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	char *p=0;
	if(p=strchr(Lower,ch)){
		return 0;
	}
	return Upper[(int)(p-Lower)];
}
これを適当に文字変換させたいところに入れるだけです。

tk-xleader

Re:Cのプログラムについて

#11

投稿記事 by tk-xleader » 16年前

おっと、これは間違ってますね。正しくは、
#include<string.h>

char ToUpper(char ch)
{
	const char Lower[/url]="abcdefghijklmnopqrstuvwxyz";
	const char Upper[/url]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	char *p=0;
	if(!(p=strchr(Lower,ch))){
		return 0;
	}
	return Upper[(int)(p-Lower)];
}

たかぎ

Re:Cのプログラムについて

#12

投稿記事 by たかぎ » 16年前

元の質問は、大文字を小文字に、小文字を大文字に変換するといった内容だったと思います(細部は忘れました)。
とりあえず、

> 勝手に特定してもらっても大丈夫です。

とのことなので、勝手に特定すると...
#include <conio.h>
#include <ctype.h>

int main(void)
{
  for (;;)
  {
    while (!_kbhit());
    int c = _getch();
    if (isalpha(c)) c ^= 0x20;
    _putch(c);
    if (c == '\r')
      break;
  }
  return 0;
}
といったところでしょうか?
処理系はMinGWです。キーボードからの入力は、実行環境を用意する手間が省ける理由から、コンソールからの入力と解釈しています。

Dixq (管理人)

Re:Cのプログラムについて

#13

投稿記事 by Dixq (管理人) » 16年前

レッドさん、まだ見ていらっしゃいますか?
もしまだ解決出来ていないのなら、
どこまで出来ているか、どこまでわかっているか、今書いているプログラムはどんなプログラムか
はっきりさせて、少しずつ作ってみませんか?

やそ

Re:Cのプログラムについて

#14

投稿記事 by やそ » 16年前

>レッドさん、キャンパスさん
たかぎさんの回答が「上から目線」ということですが、
キャンパスさんの発言(口調)も命令口調で「上から目線」に見られます。
どなたかの発言に対して意見を提示するときこそ、丁寧な口調を心掛けたほうが良いと思いますよ。

たかぎさんの回答はプログラムを勉強し始めた初心者さんにはなじみのない言葉がありますので
難しく感じるかもしれません。(処理系やロケールなど)
だけど、C言語の特徴を考えるとこのような指摘が出るのは至極真っ当なことです。

私は、このたかぎさんの回答に対するトピ主さんの捉え方(反応の仕方)で今後がある程度見える気がしてます。

今回のお題については出題者の「ともだち」(20世紀少年?)
にもう少し前提条件を絞ってもらったほうが良いと思います。
・変換するのはアルファベット(AtoZ)だけでいいのよね?
・C言語の入力って標準入力とか言わなかったっけ?キーボード入力限定って出来るの?
・記号とか数字やロシア語、ドイツ語とかの入力があったときどうすればいいの?そのまま変換せずに表示?エラー?

とかですかね。
まあ、推測ですが、出題者とレッドさんのC言語の環境がほぼ同じとかで、初心者にはあえて処理系などの細かい前提条件を伏せていたのではないでしょうか?(性善説すぎか?)

たかぎ

Re:Cのプログラムについて

#15

投稿記事 by たかぎ » 16年前

> たかぎさんの回答はプログラムを勉強し始めた初心者さんにはなじみのない言葉がありますので
> 難しく感じるかもしれません。(処理系やロケールなど)

これについては意図的にそうしています。
もし仮に、初心者にも分かりやすいようにと思って噛み砕いた表現にしてしまうと、自分で検索することができなくなってしまいます。
自分の手でウェブ検索できるようにするためには、そのものずばりのキーワードを使った方がよいのです。
自分で検索して、それでも分からなければ、改めて質問すればよいことですから。

> ・変換するのはアルファベット(AtoZ)だけでいいのよね?
> ・C言語の入力って標準入力とか言わなかったっけ?キーボード入力限定って出来るの?
> ・記号とか数字やロシア語、ドイツ語とかの入力があったときどうすればいいの?そのまま変換せずに表示?エラー?

これらについても、かなり高い確率で、A~Zの26文字とその小文字だけ、キーボード入力というのは実は標準入力、英字以外はそのまま、という解釈でよいと思います。けれども、そう決め付けるわけにはいきませんよね。
「お前らの質問はどうせこの程度だろう」と決め付けるのは、あまりにも相手をみくびっています。

dic

Re:Cのプログラムについて

#16

投稿記事 by dic » 16年前

業者ではないのですが
以下の本をお勧めします
これを全部読んで理解されてからの投稿をされた方がいいかと思います
私も独学でしたが、同じ本を半年かけて読破しました

プログラミング言語C ANSI規格準拠
http://www.amazon.co.jp/%E3%83%97%E3%83 ... 011&sr=8-2

おそらくキーボードからの入力関数すら分かっていない状態のように見受けられます

おすすめの本に関しては色んな方の意見もあるかとおもいますが

失礼かもしれませんが、いきなりプログラム教えてくださいと言われてもケンカを売っているようにしか
うけとめられません
コンパイル、リンク、デバック、ビルドなどの用語など理解されてますか?

>管理人さんへ
不適切な表現でしたら削除してください

やそ

Re:Cのプログラムについて

#17

投稿記事 by やそ » 16年前

ここの掲示板を頻繁に閲覧する常連の方々などはたかぎさんの回答の裏にある意図は汲んでおられると思います。

>かなり高い確率で、A~Zの26文字とその小文字だけ、キーボード入力というのは実は標準入力、英字以外はそのまま、という解釈でよいと思います。けれども、そう決め付けるわけにはいきませんよね。

そうなんですよね。だけどこの辺の前提条件の提示をおろそかにしてしまう質問がポコポコ見られるので回答する方が逆に気を使うことが多くなって大変です(笑)
なんとも世知辛い世の中ですなぁ^^;

>いきなりプログラム教えてくださいと言われてもケンカを売っているようにしか
うけとめられません

これも、最近は多くなってきましたな。
質問者は急いで回答を欲しいということのあせりがそうさせるのでしょうが、
規約を読んで、マナーを守り、見る相手を気持ちよくさせる質問をひとつでも多く見たいものです。

non

Re:Cのプログラムについて

#18

投稿記事 by non » 16年前

レッド さんへ
まず、アスキーコード表をインターネットなどで検索して、半角アルファベットのコードを調べます。
すると、Aは0x41(16進数)でaは0x61なのが分かります。また、他のアルファベットも常に同じ数だけ
ずれているのに気づくはずです。
この差は、0x61-0x41=0x20です。
>1.16進数の□を加える。(コード表をよく見る)
の答えがこれになります。(小文字を大文字なら0x20を引くことになります)
また、この計算を
'a'-'A' とすれば、やはり、0x20です。
>2.’A’-’a’の結果を加える。
さらに
> 3.関数 toupper を使用する。(ctype h を #include する)
は、小文字を大文字に変換してくれる組み込み関数です。この場合は、小文字でなければ、変換しませんので
小文字かどうかをチェックしなくていいです。

なにが、どうわからないのかを伝えていただければ、もっと適切なアドバイスができますので、どうぞ
ご質問ください。

Haru

Re:Cのプログラムについて

#19

投稿記事 by Haru » 16年前

>だれからも指摘がないのをいいことに、

誰からも指摘がないと言う事はここの掲示板に来ている方は皆たかぎさんのアドバイスが正しい事であると、
感じているからではないでしょうか?

>自分の技術力を誇示するためだけであるかのような
>「回答してやるぜ。どうせ内容はわからんだろうけどな」
>と受け取れる姿勢はいかがなものか。

私はそのようにはとらえませんでしたが、後半はともかくとして、
一理あるのではないでしょうか?何故なら、自分の技術力を誇示してくれる方がいなかったら
質問形式の掲示板というものは成り立たなくなってしまいますよね?
(たかぎさん、他の回答者さん気を悪くなされたらすみません)


>そろそろ、「上から目線」の姿勢を改める方がよい。

たかぎさんに限らず回答者全てに当てはまることですが、
教えてもらってる立場と、教えてる立場、つまり、先生と生徒という図式になる訳ですよね?

私は教わっている側なので、物を教えていただいている相手に対して上から目線だなどと感じたことがありません。

全ての回答者さんにおいて当人がどう思っているかは別として、
上から目線に見えることに対して問題があるとは感じません。

たかぎ

Re:Cのプログラムについて

#20

投稿記事 by たかぎ » 16年前

「上から目線」といった一過性の流行語にいちいち反応する気はないのですが...

私は、相手が初心者であるとか、未熟であるとかの理由で見下すことはありません。
ただ、相手が子供ならともかく、一端の口を聞く大人であれば、常に教えてもらうだけ、やってもらうだけの立場に終始する人は軽蔑します。相手が子供である場合には、そんな大人にならないように諭すのは年長者としての義務です。

例えば、プログラミングに関しては経験が浅いためにこの掲示板ではいつも質問者であったとしても、経理のことなら得意だというのであれば、他の掲示板やメーリングリストで、簿記などについて回答者になっているというのであればそれでよいのです。掲示板でなくても、他の方法で還元できているのならそれでもよいでしょう。

常に誰かから何かをもらうことしか考えていない者のことを「餓鬼」または「貧乏人」といいます。

dic

関係なくてすいません

#21

投稿記事 by dic » 16年前

<わからない七大理由>

1.読まない ・・・説明書などを読まない。読む気などさらさらない。
2.調べない ・・・過去スレ、ググるなど最低限の内容も自分で調べようとしない。
3.試さない ・・・めんどくさいなどの理由で実行しない。する気もない。
4.理解力が足りない ・・・理解力以前の問題で理解しようとしない。
5.人を利用することしか頭にない ・・・甘え根性でその場を乗り切ろうとする。
6.感謝しない・・・教えてもらって当たり前。事がすんだらさようなら。
7.逆切れする・・・自分の思うようにならないと逆切れする。


キャンパス

Re:Cのプログラムについて

#23

投稿記事 by キャンパス » 16年前

このトピをごらんのみなさま、キャンパスです。
このたびは、私の暴言のせいでたいへんご迷惑をおかけしてしまい、
申し訳ありません。

特にたかぎさんには不愉快な思いをさせてしまいました。
重ねておわび申し上げます。

閉鎖

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