年末からC言語を始めました
- Field Bloom
- 記事: 22
- 登録日時: 8年前
年末からC言語を始めました
初めまして。C言語フォーラムの皆さま
年末からC言語を始めたField Bloomと申します。
とても頭の悪い質問をしてると思うんですが恥を忍んで質問させてください。
小学生の頃からプログラムを組んでいた主人(お師匠さん)のやってる事が楽しそうで、何とか私も覚えたいと思って始めてみました
主人はお師匠さんでしたが、年末年始にしか教わる機会がなく(そして主人もまた自分のプログラムが忙しそう)
ずっと自力で頑張ってきましたがどうしてもcharの概念が理解できません。
全ての文は何も見ないで書けるようになるまで何十回も書いて覚えて頑張ってきましたが、
printfで済むような事をなぜcharでやらなければならないのか理解できません
どうかお勧めのサイトとかございましたら、そう言った情報でもいいので教えて頂きたいです
Cを始めてまだ2週間程度です。どうかよろしくお願い致します(他の言語などは一切やった事がありません)
年末からC言語を始めたField Bloomと申します。
とても頭の悪い質問をしてると思うんですが恥を忍んで質問させてください。
小学生の頃からプログラムを組んでいた主人(お師匠さん)のやってる事が楽しそうで、何とか私も覚えたいと思って始めてみました
主人はお師匠さんでしたが、年末年始にしか教わる機会がなく(そして主人もまた自分のプログラムが忙しそう)
ずっと自力で頑張ってきましたがどうしてもcharの概念が理解できません。
全ての文は何も見ないで書けるようになるまで何十回も書いて覚えて頑張ってきましたが、
printfで済むような事をなぜcharでやらなければならないのか理解できません
どうかお勧めのサイトとかございましたら、そう言った情報でもいいので教えて頂きたいです
Cを始めてまだ2週間程度です。どうかよろしくお願い致します(他の言語などは一切やった事がありません)
Re: 年末からC言語を始めました
初めまして。Rittai_3Dと申します。
ちなみに、「char 意味」で調べたら2つ目に出てきました。
Field Bloom さんが書きました:printfで済むような事をなぜcharでやらなければならないのか理解できません
この文章なのですが、意味が分からないです。何をcharでやるのか、また全ての文が何なのかが分かりません。Field Bloom さんが書きました:全ての文は何も見ないで書けるようになるまで何十回も書いて覚えて頑張ってきましたが、
http://e-words.jp/w/char%E5%9E%8B.htmlここが参考になりませんか?Field Bloom さんが書きました:charの概念が理解できません。
ちなみに、「char 意味」で調べたら2つ目に出てきました。
初心者です
- Field Bloom
- 記事: 22
- 登録日時: 8年前
Re: 年末からC言語を始めました
3Dさんご回答ありがとうございます。
私の今の認識ですと、文字列をcharで表示するという認識なのですが
printfでABCDE を表示するのと
charにABCDEを代入して表示する意味が解らず・・・といった所で
多分正しく理解していないと思います
文字の集まりならばprintfで出力できるのではないかと思ってしまって
あっ。全ての文というのはchar以外のサンプルプログラムです。
if文などはサンプルプログラムを見ないで書けるようにはしたんですが
私の今の認識ですと、文字列をcharで表示するという認識なのですが
printfでABCDE を表示するのと
charにABCDEを代入して表示する意味が解らず・・・といった所で
多分正しく理解していないと思います
文字の集まりならばprintfで出力できるのではないかと思ってしまって
あっ。全ての文というのはchar以外のサンプルプログラムです。
if文などはサンプルプログラムを見ないで書けるようにはしたんですが
Re: 年末からC言語を始めました
文字列はchar型の変数には入りませんし、普通はcharで表示(?)はできない気がします。Field Bloom さんが書きました:私の今の認識ですと、文字列をcharで表示するという認識なのですが
char型の変数は1文字しか入らないので、普通はABCDEは代入できないか、代入すると一部のデータが消えます。(「ABCDE」がchar型の変数なら別ですが)Field Bloom さんが書きました:printfでABCDE を表示するのと
charにABCDEを代入して表示する意味が解らず・・・といった所で
「charにABCDEを代入して表示する」サンプルコードを提示していただけますか?
オフトピック
リンカスクリプト(?)やnasmで出力に使用するメモリマップドな出力ポートやVRAMの要素をchar型の「変数」に割り当て、そこに代入することで出力や表示をすることはできる…?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
- Field Bloom
- 記事: 22
- 登録日時: 8年前
Re: 年末からC言語を始めました
いっぱいいっぱいだったので、ご挨拶忘れてましたみけさん丁寧なご検討有難うございます
シングルクォートで囲んだchar mojiretu[5] = {'A','B','C','0'};を始めに覚えました
[5]と指定したのに5以上いれるとオーバーフローする事もわかっています
その次にstrcopyを使った文字列これを代入と呼ぶのでしょうか?
こういうcharを覚えたのですが
#include <stdio.h>
#include <string.h>
int main(void)
{
char mojiretu[10];
strcpy(mojiretu, "ABCDE");
printf("%s\n", mojiretu);
return 0;
}
問題はこれをする事でどんなプログラムに使われるのかがわかりません
それと
>[/quote]
等はまだ全く分からない状態です・・・リンカスクリプトやVRAMは今現在C言語講座サイトには出てきていません
シングルクォートで囲んだchar mojiretu[5] = {'A','B','C','0'};を始めに覚えました
[5]と指定したのに5以上いれるとオーバーフローする事もわかっています
その次にstrcopyを使った文字列これを代入と呼ぶのでしょうか?
こういうcharを覚えたのですが
#include <stdio.h>
#include <string.h>
int main(void)
{
char mojiretu[10];
strcpy(mojiretu, "ABCDE");
printf("%s\n", mojiretu);
return 0;
}
問題はこれをする事でどんなプログラムに使われるのかがわかりません
それと
>
オフトピック
リンカスクリプト(?)やnasmで出力に使用するメモリマップドな出力ポートやVRAMの要素をchar型の「変数」に割り当て、
>そこに代入することで出力や表示をすることはできる…?
>そこに代入することで出力や表示をすることはできる…?
等はまだ全く分からない状態です・・・リンカスクリプトやVRAMは今現在C言語講座サイトには出てきていません
最後に編集したユーザー Field Bloom on 2016年1月06日(水) 14:50 [ 編集 1 回目 ]
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 年末からC言語を始めました
ざっくり説明するとchar配列に文字列は格納できますが、これは文字列加工やループ処理、複雑な表示処理において便利だからです。
簡単なプログラムの場合は特に役に立つわけではないですので、将来的には必要なので勉強すると考えていただくしか無いと思います。
あと覚えるというより理解すると言ったほうがしっくりするのがプログラミン言語の学習ですので、なんでも覚えると思っていただかないほうが良いかと思います。
>その次にstrcopyを使った文字列これを代入と呼ぶのでしょうか?
copy(複製)ですね。関数名もcopyと書かれています。
広い意味では代入といえると思います。
>問題はこれをする事でどんなプログラムに使われるのかがわかりません
strcatと組みあせて文字列を結合するとかで使われます。
現状だと固定文字列ですが、scanfで入力とかファイルから入力とかどんどん使い方の幅が広がります。
簡単なプログラムの場合は特に役に立つわけではないですので、将来的には必要なので勉強すると考えていただくしか無いと思います。
あと覚えるというより理解すると言ったほうがしっくりするのがプログラミン言語の学習ですので、なんでも覚えると思っていただかないほうが良いかと思います。
>その次にstrcopyを使った文字列これを代入と呼ぶのでしょうか?
copy(複製)ですね。関数名もcopyと書かれています。
広い意味では代入といえると思います。
>問題はこれをする事でどんなプログラムに使われるのかがわかりません
strcatと組みあせて文字列を結合するとかで使われます。
現状だと固定文字列ですが、scanfで入力とかファイルから入力とかどんどん使い方の幅が広がります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- Field Bloom
- 記事: 22
- 登録日時: 8年前
Re: 年末からC言語を始めました
ソフト屋さん ご回答感謝致します
ふむふむ今後While等にも使われるのでしょうか。
わからないまま進むのが嫌で、今までの過程まではわかるまでいろんなサイトを徘徊しました
(While、for,if,else.等)
それらのソースの書き方、条件式は覚えるまで書き、
サイトを見ずとも自分で簡単なアレンジを加えてかけるかどうかも試してきました
ですが簡単なサンプルプログラミングのみなので、複雑な事はまだできない気がします。
私も皆さんのご回答を拝見しながら色んなサイトを徘徊し、漠然とは理解したような気もするのですが、
このまま進んでよいものかどうかといった所です
strcatは次の項目に書いてありました。色々試しながらまた戻って繰り返してをしながら
理解を深めていくのが良いのかなと思っております
とても勇気の出るご回答をありがとうございました!覚えるより理解を深める、その通りですね!
頑張ります!
ふむふむ今後While等にも使われるのでしょうか。
わからないまま進むのが嫌で、今までの過程まではわかるまでいろんなサイトを徘徊しました
(While、for,if,else.等)
それらのソースの書き方、条件式は覚えるまで書き、
サイトを見ずとも自分で簡単なアレンジを加えてかけるかどうかも試してきました
ですが簡単なサンプルプログラミングのみなので、複雑な事はまだできない気がします。
私も皆さんのご回答を拝見しながら色んなサイトを徘徊し、漠然とは理解したような気もするのですが、
このまま進んでよいものかどうかといった所です
strcatは次の項目に書いてありました。色々試しながらまた戻って繰り返してをしながら
理解を深めていくのが良いのかなと思っております
とても勇気の出るご回答をありがとうございました!覚えるより理解を深める、その通りですね!
頑張ります!
Re: 年末からC言語を始めました
まず、printfに渡す文字列は データが char型であることは疎か、配列である必要すらありません。Field Bloom さんが書きました: printfで済むような事をなぜcharでやらなければならないのか理解できません
printfの方から データは char型のアドレスで渡してもらえるように構文上でこちらに要求しているだけです。
以下を見てください。(注:Intelなどリトルエンディアンを扱うCPUを前提としたコードです)
#include <stdio.h>
#include <string.h>
int main()
{
int a = 0;
a = 'a';
printf("%c\n", a); // a
a = 66;
printf("%s\n", (char*)&a); // B
strcpy((char*)&a, "abc");
printf("%s\n", (char*)&a); // abc
}
「char型のアドレスが渡されている、渡されていない」という判定は、コンパイラが構文上でチェックしているだけです。
つまり、コンパイラが許せば以下でも同じ実行結果が得られます。
#include <stdio.h>
#include <string.h>
int main()
{
int a = 0;
a = 'a';
printf("%c\n", a); // a
a = 66;
printf("%s\n", &a); // B
strcpy(&a, "abc");
printf("%s\n", &a); // abc
}
要は、printfはあまり利口ではありません。
つまり、char で渡すというのは、「変数」で渡すということを意味しています。
逆に "ABCDE" で渡すというのは、「定数」で渡すということを意味しています。
なので、Field Bloomさんが抱えている疑問は「なぜ「定数」で事足りるのに「変数」でやる必要があるのか?」ということになります。
「変数」と「定数」については、以下の参考サイトをみてみるとなんとなく分かるかもしれません。
データの扱い
標準入出力関数(1)
疑問を
「printfで済むような事をなぜcharでやらなければならないのか」
から
「「変数」と「定数」でそれぞれできること、できないこと」
にテーマを変えて考え始めてみると解決の糸口が見つかるかもしれません。
Re: 年末からC言語を始めました
訂正: int型でも、printfは %c なら文字、%s なら(自分のアドレスを渡してやれば)文字列として表示してくれます。sleep さんが書きました: int型でも、自分のアドレスを渡してやれば printfは %c なら文字 %s なら 文字列として表示してくれます。
- Field Bloom
- 記事: 22
- 登録日時: 8年前
Re: 年末からC言語を始めました
Sleepさん…凄く丁寧な回答にびっくりしております…!
わからない単語が多々書いてありますが、(ポインタ、アドレスはまだ出てきていなかったんです)
単語を全て調べて理解に挑んでみています
私の疑問点を全てまとめてくださって本当に感謝してます…!
そうです!こう言う事が言いたかったのです!
こんな風に私の疑問を正確に理解して下さる方がいるとはびっくりです
どう伝えればよいのか困っておりました
紹介されたサイトじっくり読んでみたいと思います!本当に本当にありがとうございました!
頑張って理解に挑みます!
わからない単語が多々書いてありますが、(ポインタ、アドレスはまだ出てきていなかったんです)
単語を全て調べて理解に挑んでみています
私の疑問点を全てまとめてくださって本当に感謝してます…!
そうです!こう言う事が言いたかったのです!
こんな風に私の疑問を正確に理解して下さる方がいるとはびっくりです
どう伝えればよいのか困っておりました
紹介されたサイトじっくり読んでみたいと思います!本当に本当にありがとうございました!
頑張って理解に挑みます!
- Dixq (管理人)
- 管理人
- 記事: 1661
- 登録日時: 13年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: 年末からC言語を始めました
お勧めの本は?と言われたらいつもこれを紹介している本です。
これは入門編ですが、実践編もありますので、入門編が読み終わったら実践編を読んでみてください。
しかし旦那さんは普段教えてくれないんですか?
夫婦なら旦那に聞くのが一番早い気が・・。
これは入門編ですが、実践編もありますので、入門編が読み終わったら実践編を読んでみてください。
しかし旦那さんは普段教えてくれないんですか?
夫婦なら旦那に聞くのが一番早い気が・・。
オフトピック
私なら嫁がプログラム勉強したいと言ってくれるなら朝から晩まで教えるのに・・。(勉強してくれない
- Field Bloom
- 記事: 22
- 登録日時: 8年前
Re: 年末からC言語を始めました
サイト管理人様まで… 本当に感謝いたします!
管理人様のご紹介の本の概要を拝見してみました。
もうすでに覚えてしまったことも、本から見る事で復習になるのでいいですね
明日にでも大型書店に行ってあるかどうか見てみたいと思います!
アドバイス本当に嬉しいですありがとうございます
朝から晩まで(笑)
お正月はそんな感じでした。
強化合宿のようでした・・・
新しい事を覚えるのは楽しいので全く苦痛ではなかったです
普段はどうしても夜遅くまで仕事してる為、聞きづらいですね。
あまり主人に頼りすぎないよう自力で頑張ろうと思っています
書籍やサイトを参考にですね
管理人様のご紹介の本の概要を拝見してみました。
もうすでに覚えてしまったことも、本から見る事で復習になるのでいいですね
明日にでも大型書店に行ってあるかどうか見てみたいと思います!
アドバイス本当に嬉しいですありがとうございます
朝から晩まで(笑)
お正月はそんな感じでした。
強化合宿のようでした・・・
新しい事を覚えるのは楽しいので全く苦痛ではなかったです
普段はどうしても夜遅くまで仕事してる為、聞きづらいですね。
あまり主人に頼りすぎないよう自力で頑張ろうと思っています
書籍やサイトを参考にですね