C言語なら俺に聞け(入門編)Part 78
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2011/02/06(日) 18:33:49★前スレ
C言語なら俺に聞け(入門編)Part 77
http://hibari.2ch.net/test/read.cgi/tech/1295721606/
★過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
★教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 146代目
http://hibari.2ch.net/test/read.cgi/tech/1296387672/
★C++言語については避けてください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
# サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
0685デフォルトの名無しさん
2011/02/12(土) 23:35:320686デフォルトの名無しさん
2011/02/12(土) 23:36:29ここではaって見た方が意味が分かりやすいけど、全体を通してみると
ポインタオペランドって言葉が、ポインタに対する演算結果と言う意味で
使われているので多分a[i]で合ってると思う…
あとは、他の人にまかせた
ノ
0687デフォルトの名無しさん
2011/02/12(土) 23:37:26>これがすでにありえないコードなんだけど。
なんで?
0688デフォルトの名無しさん
2011/02/12(土) 23:39:26ループ抜けるときのpの値はstr-1なんだし
0689デフォルトの名無しさん
2011/02/12(土) 23:41:11「ループを抜けた時点で」←ダウト
配列の先頭よりも前を指すポインタと比較して、正しい結果が得られる保証がないため、ループを抜けないかもしれない
0690デフォルトの名無しさん
2011/02/12(土) 23:46:44「配列の先頭よりも前を指すポインタと比較して」←ダウト
未定義の処理なので、比較すらされないかもしれない
0691デフォルトの名無しさん
2011/02/12(土) 23:49:31それは知らなかった。
初期化されていないポインタとか大丈夫なの
0692デフォルトの名無しさん
2011/02/12(土) 23:52:48>初期化されていないポインタとか大丈夫なの
不定値になるから大丈夫
そもそも「意図的な演算によって」不正なアドレスを生成するのと初期化で勝手に値が入るのは別
0693デフォルトの名無しさん
2011/02/12(土) 23:54:31>え、配列の先頭よりも前を指すポインタを生んだ時点で未定義なの?
違います。
演算結果が、配列の先頭よりも前を指すポインタを生んだ時点で未定義になります
初期化されてないポインタは演算されてないので、無問題です。
0694デフォルトの名無しさん
2011/02/12(土) 23:55:29不正なアドレスをポインタに代入することが未定義だってことなんだよね?
ついに規格を読む日が来たか
0696692
2011/02/12(土) 23:59:56>>693が書いてる通りで、「演算によって有効でないアドレスを生成する」と未定義の動作を引き起こす
んで、配列に関する「有効なアドレス」は「要素を指すアドレス」か「最後の要素を一つ越えたところ」
初期化はそもそも関係ない話
0697デフォルトの名無しさん
2011/02/13(日) 00:01:00初期化されてない変数等に対するアクセスと、ごっちゃになってない?
規格上のポインタに対する操作は厳しい
0698694
2011/02/13(日) 00:03:59つまり、C FAQの
> ポインター演算は、一度に割り振られた領域と、
> 仮想的な"終端"を越えた1つめの要素にだけ定義されていて、それ以外では未定義である。
> このことは、たとえポインターを参照に使っていないとしてもあてはまる。
> 上のコードはオフセットを引いた時に、とんでもないアドレスを作り出して
というくだりは、
オフセットを引いたときは未定義であるため、とんでもないアドレスを作り出す可能性があり
ということ?
>>697
そこはごっちゃになってないです
0699デフォルトの名無しさん
2011/02/13(日) 00:07:26>オフセットを引いたときは未定義であるため、
未定義なのでアドレスを作り終える前に鼻から悪魔が出てくるかも知れない
0700デフォルトの名無しさん
2011/02/13(日) 00:09:58JIS規格読んで。上の方にある引用でもいいから。未定義と書いてあるから未定義なの。
CFAQは一例としてそういうアーキテクチャを挙げているだけ。
っていうか未定義の原因をあれこれ考えるのは考えすぎだよ。
0701694
2011/02/13(日) 00:15:17ごめん、今引用されてることに気づかず、ちょうど6.5.6に到達してたところでした。
未定義になることを理解しました。
未定義の原因なんてものは考えてないです。なにをすることが未定義なのかを考えてました。
スレ汚しすみませんでしたー
0702デフォルトの名無しさん
2011/02/13(日) 00:16:27あぁ、純粋に普通の質問だったのか
きつく言い過ぎたよ、ごめんな
0703デフォルトの名無しさん
2011/02/13(日) 00:44:06それに続く比較の効果は未定義とする
比較されるかどうかもわからないのにわざわざ書いてるんだなぁ。
0704デフォルトの名無しさん
2011/02/13(日) 01:15:43???
0705デフォルトの名無しさん
2011/02/13(日) 01:58:170706デフォルトの名無しさん
2011/02/13(日) 04:14:48これを実行しても、「test」に何もかかれないのですが、
なぜでしょうか?
0707デフォルトの名無しさん
2011/02/13(日) 04:18:410708デフォルトの名無しさん
2011/02/13(日) 04:20:27何も起こりません・・・。
0709デフォルトの名無しさん
2011/02/13(日) 04:26:000710デフォルトの名無しさん
2011/02/13(日) 04:27:28テキストの名前は「test」なのか、「test.txt」なのかどっちでしょうか?
0711デフォルトの名無しさん
2011/02/13(日) 04:30:110712デフォルトの名無しさん
2011/02/13(日) 04:50:30あ、ありがとうございます!
できました^^
0713デフォルトの名無しさん
2011/02/13(日) 05:15:410714デフォルトの名無しさん
2011/02/13(日) 05:24:45include <stdio.h>
int main(void)
{
int vx, vy;
printf("国語\n数学\n英語");
printf("整数vx:"); scanf("%d",&vx);
printf("整数vy:"); scanf("%d",&vy);
printf("vx + vy = %d/n", vx + vy);
printf("vx - vy = %d/n", vx - vy);
printf("vx * vy = %d/n", vx * vy);
printf("vx / vy = %d/n", vx / vy);
printf("vx %% vy = %d/n", vx % vy);
return (0);
}
読み込んだ整数の和 差 積 商 剰余を表示するプログラムのはずなのですが、
うまく動作しません。 指摘お願いします。
int main(void)
{
int vx, vy;
printf("国語\n数学\n英語");
printf("整数vx:"); scanf("%d",&vx);
printf("整数vy:"); scanf("%d",&vy);
printf("vx + vy = %d/n", vx + vy);
printf("vx - vy = %d/n", vx - vy);
printf("vx * vy = %d/n", vx * vy);
printf("vx / vy = %d/n", vx / vy);
printf("vx %% vy = %d/n", vx % vy);
return (0);
}
読み込んだ整数の和 差 積 商 剰余を表示するプログラムがうまく動作しません
指摘お願いします。
0717デフォルトの名無しさん
2011/02/13(日) 13:27:38○ \n
http://hibari.2ch.net/test/read.cgi/tech/1295273862/87-88
http://hibari.2ch.net/test/read.cgi/tech/1295273862/110-111
http://hibari.2ch.net/test/read.cgi/tech/1295273862/127-128
http://hibari.2ch.net/test/read.cgi/tech/1295273862/167-168
ここで燃料投下
http://hibari.2ch.net/test/read.cgi/tech/1295273862/169
釣果
http://hibari.2ch.net/test/read.cgi/tech/1295273862/170-186
http://hibari.2ch.net/test/read.cgi/tech/1296984829/453-469
さらに燃料追加
http://hibari.2ch.net/test/read.cgi/tech/1296984829/472,476
釣果
http://hibari.2ch.net/test/read.cgi/tech/1296984829/477-480,482-517,523,524,
総括
http://www.youtube.com/watch?v=_eA1l0vQFxE
int main(void)
{
int vx, vy;
printf("整数vx:"); scanf("%d",&vx);
printf("整数vy:"); scanf("%d",&vy);
printf("vx + vy = %d\n", vx + vy);
printf("vx - vy = %d\n", vx - vy);
printf("vx * vy = %d\n", vx * vy);
printf("vx / vy = %d\n", vx / vy);
printf("vx %% vy = %d\n", vx % vy);
return (0);
}
これでもうまくいきません;
0720デフォルトの名無しさん
2011/02/13(日) 14:12:290721デフォルトの名無しさん
2011/02/13(日) 14:14:21#include <stdio.h>
0722デフォルトの名無しさん
2011/02/13(日) 14:54:47よう人格障害
事件を起こす前に精神科逝け
0723デフォルトの名無しさん
2011/02/13(日) 15:00:370724デフォルトの名無しさん
2011/02/13(日) 15:03:48言いい放題って日本語じゃねーだろw
0725デフォルトの名無しさん
2011/02/13(日) 15:15:560726デフォルトの名無しさん
2011/02/13(日) 15:23:30超キチガイ、それがどうスレのC言語に関係はるんだ
関係ないことを書いてスレを荒らしまくろうってしてるんだろ
さすが超キチガイ、荒らすことしかしないんだな
0727デフォルトの名無しさん
2011/02/13(日) 15:26:230728デフォルトの名無しさん
2011/02/13(日) 17:28:56友達は、明快C言語入門編を一週間で読破、次の一週間で中級編も読破しました。
でその次の二週間でアルゴリズムなどの入門書を読破していました。
今ではコンソールプログラムの基礎的なものなら大抵書けるようになってます。
結局一ヶ月でC言語きわめてますよね?これって普通ですか?
0729デフォルトの名無しさん
2011/02/13(日) 17:34:06>コンソールプログラムの基礎的なもの
これがおみくじプログラムとかテストの平均点を計算するプログラムとかなら
一ヶ月目としては普通じゃないの。
bc より高機能な電卓だったり、XML のパーサなんかだったらちょっと凄い。
0730デフォルトの名無しさん
2011/02/13(日) 17:35:43#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i;
char *str[] = {"普通","早い",遅い"}
0731デフォルトの名無しさん
2011/02/13(日) 17:37:410732デフォルトの名無しさん
2011/02/13(日) 17:47:11プログラミングの分野なんて様々だから、半年もすれば得意分野・専門分野に別れて、
単純に能力の優劣を比較出来ないようになるもんだ。
0733デフォルトの名無しさん
2011/02/13(日) 18:02:54なんでお前スレ荒らしてるの?w
そんなに悔しいの?w
0734デフォルトの名無しさん
2011/02/13(日) 18:06:06専門用語が読めなくて、一ヶ月を待たずして挫折したなあ
参考書高かったのに・・・
0735デフォルトの名無しさん
2011/02/13(日) 18:26:210736デフォルトの名無しさん
2011/02/13(日) 18:27:14int dainyu(int);
int main()
{
int a;
dainyu(a);
printf("aの値は%d",a);
return 0;
}
int dainyu(int)
{
int a;
scanf("a--%d",&a);
return 0;
}
sample.c(12): error C2055: 型リストではなく、仮パラメーター リストが必要です。
ってエラーが出るんですけど関数からaの中身変えるにはどうすればいいんでしょうか?
0737デフォルトの名無しさん
2011/02/13(日) 18:34:10>{
>int a;
>scanf("a--%d",&a);
>return 0;
>}
ひどすぎるw
0738デフォルトの名無しさん
2011/02/13(日) 18:36:37必要最低限の修正で
#include<stdio.h>
int dainyu(int *a);
int main()
{
int a;
dainyu(&a);
printf("aの値は%d",a);
return 0;
}
int dainyu(int *a)
{
scanf("a--%d",a);
return 0;
}
0739736
2011/02/13(日) 18:48:34#include<stdio.h>
int dainyu(void);
int main(void)
{
int a;
a = dainyu();
printf("aの値は%d",a);
return 0;
}
int dainyu()
{
int a;
scanf("a--%d",&a);
return return a;
}
0740デフォルトの名無しさん
2011/02/13(日) 18:52:49ありがとうございました、参考書読み直します
>>739
どなたですか?最後のreturnに式が必要ですとエラーが出ました
0741736、740
2011/02/13(日) 18:56:27勉強になります
0742デフォルトの名無しさん
2011/02/13(日) 22:41:02id = (year*100000) + (month*1000) + (day*10) + (jikan-8)
特定の入力した年月日と時間を関数化し、そのreturnとして、IDを発行することになりました。
時間は18時未満限定なので、これで通用するのですが、関数化する事になって復元化が必要になりました。
呼び出しも関数からなのですが、復元する方法、あるいは分けて表示する方法、
year 年 month 月 day 日 の jikan 時間としたいのですが、いい手はないでしょうか。
単純に割っていくことも考えましたが、いまいちでした。
参考になるような計算式や言葉などありましたら、よろしくお願いします。
0743デフォルトの名無しさん
2011/02/13(日) 22:43:320744デフォルトの名無しさん
2011/02/13(日) 22:55:36かける数値は素数がいいよ
0745デフォルトの名無しさん
2011/02/13(日) 22:57:37年4桁
月2桁
日2桁
時2桁
分2桁
秒2桁
合計14桁なのでintに収まらない。
こういうのは構造体を使うとラク。
0746デフォルトの名無しさん
2011/02/13(日) 23:01:03ああごめん、分秒までは要らないのか。
だったら大きい方から商と剰余を求めていけば出てくるよ。
0747 ◆QZaw55cn4c
2011/02/13(日) 23:02:07http://codepad.org/p34BxNub
>>745
そうですね。見抜けませんでした。
0748デフォルトの名無しさん
2011/02/13(日) 23:05:33struct hoge{
0749デフォルトの名無しさん
2011/02/13(日) 23:07:14struct hoge{
uint 64_t id;
union{
uint16_t y;
uint16_t m;
uint16_t d;
uint16_t h;
}u;
};
0750デフォルトの名無しさん
2011/02/13(日) 23:23:44'@@'とか、文字を二つ以上格納したいのですが、
切り捨てられました
とか言って格納できません。
何かj方法はありませんか?
0751デフォルトの名無しさん
2011/02/13(日) 23:27:06そんなに時間がたっていないのにありがとうございます。
構造体か、余りを使うかはこれから検証します。本当にありがとうございました。
0752デフォルトの名無しさん
2011/02/13(日) 23:39:15復元したいんだからダメじゃね?更に復元以前にハッシュ値が衝突しない保障はある?
素数が良いとか言う前にハッシュ関数とかMD5が何者か勉強しなおせwww
0753デフォルトの名無しさん
2011/02/13(日) 23:39:46秒までいるなんて書いてない。
8時 <= jikan < 18時なんだろ
0754デフォルトの名無しさん
2011/02/13(日) 23:41:01文字列(文字配列)に入れてください。
0755デフォルトの名無しさん
2011/02/13(日) 23:42:30もうチョットやりたい事とソースを晒したほうがいいと思う。
今のままだとあなたが期待していないことまで含めて100通りの答えが出てきそう…
0756デフォルトの名無しさん
2011/02/13(日) 23:58:360757デフォルトの名無しさん
2011/02/14(月) 00:10:250758デフォルトの名無しさん
2011/02/14(月) 00:58:280759デフォルトの名無しさん
2011/02/14(月) 01:09:530760デフォルトの名無しさん
2011/02/14(月) 01:20:49減算ではオーバーフローもアンダーフローも起きるが
デクリメントではオーバーフローなら起きるけどアンダーフローは起きない
0761デフォルトの名無しさん
2011/02/14(月) 01:57:480762デフォルトの名無しさん
2011/02/14(月) 02:05:38配列の前だろうがアクセスしなければ無問題
0763デフォルトの名無しさん
2011/02/14(月) 02:06:48てか何で今になってまたこの話を?
0764デフォルトの名無しさん
2011/02/14(月) 02:15:38だったらポインタを減算してオーバーフローする例を出してみろよ
的外れなこと言ってんじゃねーぞw
0765デフォルトの名無しさん
2011/02/14(月) 02:20:260766デフォルトの名無しさん
2011/02/14(月) 02:23:290767デフォルトの名無しさん
2011/02/14(月) 02:39:41なんでその規格を敵に回すんだろう?
学生時代の車輪作成のクセが抜けないのかな
0768デフォルトの名無しさん
2011/02/14(月) 02:42:23規格外の男を演じたいんだよ
0769デフォルトの名無しさん
2011/02/14(月) 02:42:35nearモードの無理からfarモデルでたまたま配列の先頭がセグメントゼロ番地とかさ
0770デフォルトの名無しさん
2011/02/14(月) 02:50:470771デフォルトの名無しさん
2011/02/14(月) 02:56:47中二病じゃん
0772デフォルトの名無しさん
2011/02/14(月) 03:02:37p = (int*)((int)a - 1);
これって未定義?
0773デフォルトの名無しさん
2011/02/14(月) 03:05:55整数型からポインタ型への変換の話再来かw
0774デフォルトの名無しさん
2011/02/14(月) 03:10:20p = (int*)((int)a - sizeof(int));
のほうがいいんじゃね?
0775デフォルトの名無しさん
2011/02/14(月) 03:12:41お前まだそれ根にもってたのかw
オーバーフローにそこまで噛み付いてるのお前だけだぞw
0776デフォルトの名無しさん
2011/02/14(月) 03:46:59俺の下半身のポインタは規格外だぜ?
0777デフォルトの名無しさん
2011/02/14(月) 03:54:49http://codepad.org/00rlXrm3
遅れてすいません
@@と入れて、
出てくるのは@のみです
@@を格納させたいです
0778デフォルトの名無しさん
2011/02/14(月) 03:54:56ポインタの指す先はNULLNULL
0779デフォルトの名無しさん
2011/02/14(月) 03:57:16初期化時を除いて、文字列を代入することはできない。
sprintf()かstrcpy()を使うべし。
0780デフォルトの名無しさん
2011/02/14(月) 04:13:210781デフォルトの名無しさん
2011/02/14(月) 04:14:18ありがとうございます!
調べてみます
0782デフォルトの名無しさん
2011/02/14(月) 05:12:240783デフォルトの名無しさん
2011/02/14(月) 05:32:26あなたそれ何処で知りました?
機密情報ですよ
みだりに口にすると射殺されますよ
0784デフォルトの名無しさん
2011/02/14(月) 05:34:17面白いねー
■ このスレッドは過去ログ倉庫に格納されています