[過去ログ] 【初心者歓迎】C/C++室 Ver.100【環境依存OK】 [無断転載禁止]©2ch.net (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
920: デフォルトの名無しさん [sage] 2017/07/12(水) 18:44:41.01 ID:FRCEttse(1) AAS
>>918918(1): デフォルトの名無しさん [] 2017/07/12(水) 18:19:22.64 ID:Oma/x2r0(1/2) AAS
ユーザーヘッダーファイルを作って
#include<stdio.h>
#include<math.h>
#define PI 3.14
double r;
void nyuuryoku(void) {
printf("半径を入力してください。\n");
scanf("%fl", &r);
printf("%f\n", r);
return;
}
double keisan(void) {
printf("%f\n", r);
return PI*pow(r, 2);
}
と書いてprintfでrを観察してみたんですがscanfでrに数値を入力しているはずなのにrに何も反映されていないことがわかりました。
rはグローバル変数として扱われていると思うのですがなんでrの値が変わらないんでしょうか?
× scanf("%fl", &r);
○ scanf("%lf", &r);
921: デフォルトの名無しさん [sage] 2017/07/12(水) 18:45:48.34 ID:+I30gFZ0(2/3) AAS
%lfちゃうか?
922: デフォルトの名無しさん [sage] 2017/07/12(水) 18:46:07.89 ID:+I30gFZ0(3/3) AAS
失礼しますた
923: デフォルトの名無しさん [] 2017/07/12(水) 18:49:05.30 ID:Oma/x2r0(2/2) AAS
oh....
コンパイラも見逃してくれてたからそんなミスとは思いませんでした(´エ`;)
ありがとうございました
924: デフォルトの名無しさん [sage] 2017/07/12(水) 19:24:59.74 ID:iSKiMIM1(1) AAS
-Wallつけるか、clang使え
925: デフォルトの名無しさん [sage] 2017/07/12(水) 21:38:59.46 ID:Q4X+sAyq(1) AAS
>>912-914
なんか色々勘違いしてるしどうでもいいから続きはチラウラで頼むわ
926: デフォルトの名無しさん [sage] 2017/07/12(水) 23:05:57.46 ID:2e79StFo(1) AAS
最近のチラシは両面印刷で困る
927(1): デフォルトの名無しさん [sage] 2017/07/13(木) 00:31:49.82 ID:/oMuxl/G(1/2) AAS
>>907907(2): ◆QZaw55cn4c [sage] 2017/07/12(水) 07:26:19.94 ID:9q9UgJkW(1) AAS
>>880
ん、最初にもどってメッセージを書くとすれば、こうなるかな
>ポインタそのものにオブジェクトってできるんでしょうか?
私が意味を取り違えているかもしれないが、「できない」
ポインタを取得したからといって、オブジェクトが生えてくることはない
あくまで、先にオブジェクトを確保した上で、それに対してポインタを設定する手順をとる
>例えば、配列arrayのアドレスをポインタpで、ポインタpのアドレスをポインタpのポインタppで調べたんですが、
array を確保しているので、p は array 確保分(p 〜 p + 3)だけプログラムとして意味がある。
pp は p 一個分だけ意味がある。すなわち *pp = p、でも pp[1]= *(pp + 1) は確保していない領域を指すのでこの表現は使ってはいけない
&pp[1] と書くとなにがしかのアドレスを生成するが、それは使えない
アドレスを生成できるからといって、その領域が意味のあるものとは限らない
>>881 では意味のないことを求めてしまいごめんなさい
>pp[1]= *(pp + 1) は確保していない領域を指すのでこの表現は使ってはいけない
Cの規格をよく読み直したらそうでもなかった
928: デフォルトの名無しさん [sage] 2017/07/13(木) 01:06:35.55 ID:+2MHjXyv(1) AAS
>>912-914は基礎的なところで間違った理解をしていると
そのうえに乗っかるすべてのものについて間違った理解をすることしかできなくなるという見本のようだ
929(1): ◆QZaw55cn4c [sage] 2017/07/13(木) 06:27:44.49 ID:NDMOLt7F(1) AAS
>>927
>>880880(5): デフォルトの名無しさん [] 2017/07/09(日) 16:06:32.28 ID:EeQkMvgZ(1/4) AAS
ポインタそのものにオブジェクトってできるんでしょうか?
例えば、配列arrayのアドレスをポインタpで、ポインタpのアドレスをポインタpのポインタppで調べたんですが、
int array[3];
int *p = array;
int **pp = &p;
for(i = 0; i < 3; i++)
{
printf("&array[%d] : %d : %d\n", i, &array[i]);
}
&array[0] : 2293472
&array[1] : 2293476
&array[2] : 2293480
&p[0] : 2293472
&p[1] : 2293476
&p[2] : 2293480
&pp[0] : 2293468
&pp[1] : 2293472
&pp[2] : 2293476
ppが参照しているpのオブジェクトの位置が、arrayのオブジェクトのアドレスと全く同じ位置にあります。
1つのアドレスが2つのオブジェクトをもてるのか、ポインタ自体にオブジェクトは生成されないのか
他の要素でそうなってるのかわかりません。どなたか回答宜しくお願いいたします。
int **pp = &p;
でpp[1] は書いちゃだめだろう?
930(1): デフォルトの名無しさん [sage] 2017/07/13(木) 07:12:43.09 ID:/oMuxl/G(2/2) AAS
>929
その書いちゃダメを規定する6.5.6p8には「that is evaluated」という条件がある
evaluateはメモリアクセスの有無と関係無く基本的に全て行われるはずだが
6.5.3.2p3の例外既定により該当しないばかりか「&*」が省かれるとある
931: ◆QZaw55cn4c [sage] 2017/07/13(木) 08:39:26.58 ID:045lcfaT(1) AAS
>>930
シンタックスではなくセマンティクスというわけですか‥ありがとう
932(2): デフォルトの名無しさん [] 2017/07/13(木) 18:16:27.80 ID:PDgj9Ebq(1/2) AAS
#include<stdio.h>
#include<string.h>
#define NUM 10
int main(void) {
int length;
char name[NUM * 2 + 1];
char family_name[NUM + 1];
char first_name[NUM + 1];
printf("姓を入力してください\n");
scanf("%s", family_name);
printf("名を入力してください\n");
scanf("%s", first_name);
strcat(name, family_name);
strcat(name, first_name);
length = strlen(name);
printf("名前:%s\n", name);
printf("長さ:%d\n", length);
return 0;
}
このプログラムで入力まではちゃんとできてるみたいなんですがstrcatのところでおかしくなって
結合結果がフフフフフフフってなります。どうしてでしょうか?
933: デフォルトの名無しさん [sage] 2017/07/13(木) 18:29:33.51 ID:lX8cJUTX(1/4) AAS
笑われてんじゃね?
934: デフォルトの名無しさん [sage] 2017/07/13(木) 18:30:25.16 ID:lX8cJUTX(2/4) AAS
マヂレスすると、nameが不定
935: デフォルトの名無しさん [sage] 2017/07/13(木) 18:34:34.28 ID:a0isPZOF(1/2) AAS
>>932
char name[NUM * 2 + 1] = {0};
936: デフォルトの名無しさん [] 2017/07/13(木) 18:37:48.37 ID:PDgj9Ebq(2/2) AAS
ありがとうございました
937(1): デフォルトの名無しさん [sage] 2017/07/13(木) 19:34:29.65 ID:b1PvI/zl(1) AAS
どうでもいいけど、
char name[NUM * 2 + 1] = "";
普通こうじゃね?
char name[NUM * 2 + 1] = {'0'};
これでも良い
コンパイル結果はたぶん全部同じだけど
938: デフォルトの名無しさん [sage] 2017/07/13(木) 20:27:20.55 ID:bV5zFMan(1) AAS
>>932
俺のところで試してみたらフフフノフフフになった
939: デフォルトの名無しさん [sage] 2017/07/13(木) 20:43:44.17 ID:lX8cJUTX(3/4) AAS
Visual Studio のデバッグビルドだと、不定メモリをCCで埋める
だからこれに対応する'フ'が表示される
なぜ途中が'ノ'になるかはわからん
strcatではCCの後の0を探してその後に文字列をコピーするから、0の位置によっては例外が発生したり動作がおかしくなったりするかも
940(1): デフォルトの名無しさん [sage] 2017/07/13(木) 21:06:57.04 ID:a0isPZOF(2/2) AAS
>>937
= {'\0'};のタイプミスだよね?
941: デフォルトの名無しさん [sage] 2017/07/13(木) 21:23:18.88 ID:lX8cJUTX(4/4) AAS
>>940
タイプミスじゃなくて文字化けした
スマホから見ると、? が◆の中に書かれた文字になってる
942(1): デフォルトの名無しさん [sage] 2017/07/13(木) 23:03:34.21 ID:xdHlDIka(1) AAS
プログラム終了にexit 0とreturn 0がどう違いますか?
943: はちみつ餃子 ◆8X2XSCHEME [sage] 2017/07/13(木) 23:59:30.53 ID:anRp6w5D(1) AAS
>>942
違わない。
main 内の return は exit と同じ。
944: デフォルトの名無しさん [sage] 2017/07/14(金) 19:19:48.00 ID:TW7O0pB9(1/2) AAS
というタワゴトで他人を陥れるのであった
上下前次1-新書関写板覧索設栞歴
あと 58 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.032s