X



C言語なら俺たちに聞け パート0001
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2012/07/07(土) 17:15:26.10
なんでも聞きなよ
0422デフォルトの名無しさん
垢版 |
2015/02/10(火) 22:26:06.33ID:4T1+8uzu
スクラッチと言うソフトで作ったゲームをc言語に変換できますか?
0425デフォルトの名無しさん
垢版 |
2015/02/18(水) 11:28:39.01ID:Qnb1PJ0H
>424

ttp://hitorilife.com/atoi.php

>int atoi( const char *str );

>文字列で表現された数値をint型の数値に変換する。

>■戻り値:
>int型に変換した数値。変換不能文字は0を返す。
0429デフォルトの名無しさん
垢版 |
2015/02/28(土) 17:34:04.33ID:ww/ZmHX+
解ってて聞いているただの釣りとか言論封殺すんな
お前の書き込みより釣りの方がまし
0432デフォルトの名無しさん
垢版 |
2015/03/05(木) 13:59:25.35ID:QH4sjdfE
for(i = 0; i < 100; i++)

if(i % 2)

printf("%d ",i);

超初心者ですけど、この逆ってどうすればいい?
2 4 6 8・・・ ってやりたいんですけど
0433デフォルトの名無しさん
垢版 |
2015/03/05(木) 14:08:13.95ID:0g2YeNLY
その1
 if(i % 2) → if(!(i % 2))

その2
 if(i % 2)
  ;
 else
  printf("%d", i);
0435デフォルトの名無しさん
垢版 |
2015/03/20(金) 10:27:58.80ID:C4XIy6Zr
void mystrcpy(char *to, char *from);
int main(void)
{
char str[80];
mystrcpy(str, "これはテストです");
printf(str);
return 0;
}
void mystrcpy(char *to, char *from)
{
while (*from)
*to++ = *from++;
*to = '\0'; /* ヌルで文字列が終わる */
}

「 ヌルで文字列が終わる」 ヌル文字って、なんで必要なんですか?
0436デフォルトの名無しさん
垢版 |
2015/03/20(金) 12:09:15.02ID:lqHpR73F
終わりを示すマークがくるまではずっと続きますよ
という約束なのが文字列の約束

何故必要か? 文字列であるためには、そういう約束だから
0439デフォルトの名無しさん
垢版 |
2015/04/07(火) 14:41:52.97ID:s4QIRInr
int main()
{
max(100);
max(70);
max(50);
return 0;
}
void max(int d)
{
static int max = 0;
if(d > max)
max = d;
printf("max = %d\n", max);
}
全部0になるはずなのに、ならないのはなんで?
0444デフォルトの名無しさん
垢版 |
2015/04/07(火) 19:47:29.06ID:NM1cRlIv
static int max = 0; 
この行はプログラム実行時の最初の一回だけ実行される。
max()を呼んだ時は既に初期化済みで、その行は通らない。
0447片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2015/04/07(火) 20:03:03.06ID:2bTHzj+B
static変数の定義を含む関数が利用(参照)されない場合、そのstatic変数は確保されない。
0450片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2015/04/07(火) 23:06:35.68ID:2bTHzj+B
これでファイルサイズを試せ

int f(int i) {
static int a[10000000];
a[i]++;
return a[i];
}
0451片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2015/04/07(火) 23:11:56.93ID:2bTHzj+B
こうしないとダメか

int f(int i) {
static int a[10000000] = {1};
a[i]++;
return a[i];
}
0452デフォルトの名無しさん
垢版 |
2015/04/07(火) 23:28:33.42ID:NM1cRlIv
static int a[10000000]; と
static int a[10000000] = {1}; では、確保されるサイズは同じだと思うが..
0453はちみつ餃子 ◆8X2XSCHEME
垢版 |
2015/04/08(水) 13:38:35.94ID:0NyqAI50
違うよ。
前者は内容が不定値で、初期化に使う値が実行ファイル内に保存されない。 メモリ上に同じ大きさが確保されてもファイルサイズには反映されない。
ちなみに0初期化される領域も初期化値を実行ファイルに保存するのではなく、0クリア専用のランタイムルーチンを使うらしい。

てなわけで、処理系の実装上の工夫が色々とあるのでそもそもファイルサイズを見て変数が確保されるかどうかを判断しようとするのが間違い。
0454デフォルトの名無しさん
垢版 |
2015/04/08(水) 13:48:58.91ID:BJMRBHYu
ファイルサイズが違うって事か。
実行時に確保されるメモリサイズは同じだよね。
0456デフォルトの名無しさん
垢版 |
2015/04/08(水) 18:59:10.06ID:TrrKWYIM
>>453
>0クリア専用のランタイムルーチンを使うらしい。
ランタイムというか、OS 内のローダー担当であることが大半でないだろうか‥
0458デフォルトの名無しさん
垢版 |
2015/04/10(金) 16:04:47.86ID:mQuRC+MO
char *str;
で宣言したあとに
scanf("%s",str);
とすると「strを初期化せずに使うな」みたいなエラーが出ます
char str[10];
みたいに配列で宣言するとエラーは出ません

ポインタで宣言した時のと配列で宣言した時のstrは同じ物ではないんですか?
あと値が使われるわけでもなく、入力されるだけなのに初期化しなければいけない必要性がわかりません
誰か教えてください
0459デフォルトの名無しさん
垢版 |
2015/04/10(金) 16:10:54.97ID:28dWQn3h
new mallocつかえ
0460デフォルトの名無しさん
垢版 |
2015/04/10(金) 16:19:01.09ID:28dWQn3h
C言語の初歩の初歩。
char str[10];とchar *str;は別物。
char *strはアドレスを入れるための変数。アドレスを記録するための容量は確保されてるが10バイト分などは確保してない。

これだったらいけるはず。
char str[10];
char *str2;
str2=str;
scanf("%s",str2);
0461デフォルトの名無しさん
垢版 |
2015/04/10(金) 22:39:13.59ID:9kdbIScz
>>458
ポインタ変数である、char* str の strは、
アドレスという数値を1つ格納するだけの唯の変数。

それに * を付けると(*str)、そのアドレスが指し示す先のメモリ
にリンクする「ショートカット」になるだけ、と考えると分かり易いかな。

Windowsでショートカットファイルをダブルクリックしたらその先のファイルが開くようなもので
そうすると当然、指し示す先のファイルパスが設定されていないショートカットは「使えない」
というのが分かるよね?
0462デフォルトの名無しさん
垢版 |
2015/04/10(金) 22:50:25.12ID:9sVpyOtZ
>>458
>strを初期化せずに使うな
それは多分おせっかいな警告機能で、どんなコンパイラでもそうなるとは期待してはいけない

>ポインタで宣言した時のと配列で宣言した時のstr
は別ものだ、そう思い込んだほうがいい

なお蛇足だが C で配列の名前を単独で使うときは意味が変わる(この部分だけ直交性を失っている)
0464デフォルトの名無しさん
垢版 |
2015/04/24(金) 11:21:00.79ID:NRswMTwP
scanf の戻り値は、フォーマットに従い変数に代入した個数

1変数ならまあ好きに書けば良いけど
2変数以上の時に間違わないよう習慣付けているのかもしれない
0466デフォルトの名無しさん
垢版 |
2015/04/24(金) 12:24:53.38ID:NRswMTwP
入力文字がアルファベットしかなくて vに整数をつっこんでねーよ って時は
1 にならない
0468デフォルトの名無しさん
垢版 |
2015/09/14(月) 15:55:47.87ID:xWDGmwXQ
C言語初心者です。
windows7
MinGWのgccバージョン4.8.1です。

/*スタート*/
#include <stdio.h>
int main(void){
float pai,r,s;
printf("半径を入力してください=");
scanf("%f&r");

pai=3.14159;
s=pai*r*r;

printf("面積は%fです\n",s);
return 0;
}
/*終わり*/

円の面積を求めるプログラム作りました。コンパイルするのはうまくいくんですが、実行して半径を入力すると○○○.exeは動作を停止しました。とエラーダイアログが表示され結果が出力されません。
何が原因でしょうか?
0470デフォルトの名無しさん
垢版 |
2015/09/14(月) 16:23:27.10ID:hfKV6tF/
よくわからんけど、gcc 拡張の警告でチェックしてくれんの?
フォーマット文字列 と 渡した引数数の不一致
0471デフォルトの名無しさん
垢版 |
2015/09/14(月) 16:56:53.27ID:EUIVB/8j
>>468
のプログラムをgcc 4.8.1でコンパイルしたら
エラーメッセージは出なくて、実行したら
当然ながら、面積の値が0.000000と誤まった
値が出てきた。
エラーメッセージが出ないのが不思議。
オプションを付ければ、エラーメッセージがでるのだろうか
0472デフォルトの名無しさん
垢版 |
2015/09/14(月) 18:33:12.41ID:92FX1eX2
int scanf(const char *format, ...)

int printf(const char * restrict format, ...);

そういうことで。
0474デフォルトの名無しさん
垢版 |
2015/09/27(日) 07:27:17.58ID:9nB30GXC
>>471
stdio.hを追っかけていけば、
int scanf(const char *format, ...);
int printf(const char *format, ...);
のようにprintfと同じ形であることがわかる。
printf("hoge");
がエラーでないように
scanf("hoge");
もエラーとはならない。
ただgccは賢くて -Wall をつけると、
formatの中身を解析して警告を出してくれる。(printfも同様)
0475デフォルトの名無しさん
垢版 |
2015/10/22(木) 06:08:18.70ID:T7RJ3QRI
googleでgccのコンパイルオプションについて検索すると
検索結果がゼロになることが何度かあった

ちなみに
gcc -オプション名
みたいな感じ検索してた

どうもman gccの最初の数ページしかgoogleに登録されてないっぽい挙動なんだが
0476はちみつ餃子 ◆8X2XSCHEME
垢版 |
2015/10/23(金) 02:42:54.65ID:+vqb9bZy
google で検索キーワードの前にマイナス記号がついてると、
そのキーワードを含む検索結果を除外する (いわゆるマイナス検索) ようになってるので、
オプションについて検索するときは気をつけような。
0477デフォルトの名無しさん
垢版 |
2015/10/25(日) 01:00:53.79ID:KG2IWWVY
数か月前にgoogleで
gcc version-script
gcc bsymbolic-functions
gcc fvisibility
で-抜いて検索しても検索結果ゼロだったのに
今見たら検索結果でるようになってる
0479デフォルトの名無しさん
垢版 |
2015/11/26(木) 03:09:04.34ID:/vQLcmuc
そろそろC言語初心学習者に、もっとも最適な書籍を決めてください

柴田本? 苦C? 林本? やさC?
0482デフォルトの名無しさん
垢版 |
2015/11/27(金) 01:11:07.20ID:Bpp9Chxs
>>479
C言語は、アセンブリ言語を操れる人にとって簡単に使えるように出来ている。
なのでアセンブリ言語関係の本を先に読むべき。

# ジョークだよ?
0485:デフォルトの名無しさん
垢版 |
2015/11/27(金) 14:59:10.21ID:NDUaqi7o
学校の課題でc言語でゲームを作るんですが作りやすいものとかないですか?
0487デフォルトの名無しさん
垢版 |
2015/11/27(金) 16:47:57.00ID:bNIHHiC+
>>485
純粋にCだけでってなると数当て(乱数適当に作っておいて、値を受け取って小さいか大きいかを表示する)なんかも
作り易いと思う。
あとはフルハウスやババ抜きなんかのターン制のカードゲームとか
もっと面倒なのだと数独やオセロなんかの平面に文字を並べればなんとなくそれっぽく見える感じのゲームは作れうるかな
0488デフォルトの名無しさん
垢版 |
2015/11/27(金) 22:06:34.99ID:gCXolRmC
>>486
>>487
ありがとうございます
0489デフォルトの名無しさん
垢版 |
2015/11/28(土) 06:52:13.32ID:3W8Apw0w
なぜ学校でプログラミングをやるのか?
なぜCを使うのか?
目的と手段を履き違えてないか?
0490デフォルトの名無しさん
垢版 |
2015/11/28(土) 09:16:20.61ID:dfErn7u5
      ィ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;゙t,
     彡;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ヽ
     イ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;r''ソ~ヾ:;;;;;;゙i,
     t;;;;;;;リ~`゙ヾ、;;;;;;;;;;;;;;;;;;;;ノ    i,;;;;;;!
     ゙i,;;;;t    ヾ-‐''"~´_,,.ィ"゙  ヾ;;f^!   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     ト.;;;;;》  =ニー-彡ニ''"~´,,...,,.  レ')l. < >489 おまえは何を言っているんだ
     t゙ヾ;l   __,, .. ,,_   ,.テ:ro=r''"゙ !.f'l.   \____________
      ヽ.ヽ ー=rtσフ= ;  ('"^'=''′  リノ
    ,,.. -‐ゝ.>、 `゙゙゙゙´ ,'  ヽ   . : :! /
 ~´ : : : : : `ヽ:.    ,rf :. . :.: j 、 . : : ト、.、
 : : : : : : : : : : ヽ、  /. .゙ー:、_,.r'゙: :ヽ. : :/ ヽ\、
  :f: r: : : : : : : : !丶  r-、=一=''チ^  ,/   !:: : :`丶、_
  : /: : : : : : : : :! ヽ、  ゙ ''' ''¨´  /   ,i: : : l!: : : : :`ヽ、
 〃: :j: : : : : : : ゙i   `ヽ、..,,__,, :ィ"::   ,ノ:: : : : : : : : : : : :\
 ノ: : : : : : : : : : :丶   : : ::::::::: : : :   /: : : : : : : : : : : : : : : :\
0494デフォルトの名無しさん
垢版 |
2015/12/23(水) 15:06:50.61ID:1ZCzEE1G
メジャーなコンパイラにはなんで実行ファイルの難読化オプションがないんだろうか。
デマングリング不可の関数ラベル名を生成するだけでも相当な難読化になると思うのだが。
0497デフォルトの名無しさん
垢版 |
2016/01/17(日) 00:06:26.42ID:0aBE1GLW
本格的な文字列処理を行う場合、内部コードはUTF-16に統一するのが常識なのだろうか。
あと最近はユニコード扱う場合はchar16_t使うのが主流になってたりする?
0499デフォルトの名無しさん
垢版 |
2016/01/17(日) 09:16:37.12ID:Tm1vTqdo
なにかのライブラリ使うならそのライブラリが対応しているエンコーディング使えばいいが、
自前で文字単位の処理やるならマルチバイトよりワイド文字のが楽でしょ。
内部的には結局コードポイントの単位で扱うだろうし。
「本格的な」の内容がUNICODEに定義されたすべての文字を扱えるということを含むなら
UTF-32、基本多言語面だけで十分ならUTF-16でいいだろう。
0500デフォルトの名無しさん
垢版 |
2016/03/06(日) 11:31:35.36ID:g15wMUfE
文字単位が大方2バイトと決まってるUTF16使うのが一番楽。

unsigned short ch = u"あa";
ch[0]; // 'あ'
ch[1]; // 'a'

UTF-8ではこうは行かない。
0502はちみつ餃子 ◆8X2XSCHEME
垢版 |
2016/03/07(月) 02:47:20.91ID:ERCs3bA6
>>500
その「大方」がつらいんよ。
自分しか使わないプログラムとかなら手抜きしてそういうのでもいいと思うけど。
0505デフォルトの名無しさん
垢版 |
2016/03/14(月) 09:45:39.70ID:qOCQ0PgP
>504
そのまま。特別に変換するわけでもない文字列。

コマンドラインアプリで引数にヘルプオプション指定されてるか調べてると思われる。


>aaa.exe /?
>aaa.exe -?
0506デフォルトの名無しさん
垢版 |
2016/03/29(火) 09:35:20.91ID:/c8bAcK4
サッカーブッシュ日本代表日程ぷあたん(しゅっちょうまいくろ教育長交代)春文執行40代売上差額シュガーチョコ
https://www.youtube.com/watch?v=NDq1QoJY0nY宇ドナルドアナリストパワーストーンコーチングとしまえん
サッカーブッシュ日本代表日程古本屋よしたけしゅっちょうちょこしゅがー
ディーラー税務署天才開発者死亡詰みヨミドクターマイクロサービス不足
サッカーブッシュ日本代表日程ぷあたんシフト光金さかい強制バイト人権侵害問題
春分資源執行ニューヨーク低原価ぼったステーキソルトレイク福岡横浜新橋奴隷課金パチシフト強制バイト問題新潟米センター生残
コスメ24チャリティー隠れ40代生活保護プレイボーイバイトレードいたりあん接待問題
マスコミKARDローンケーオーサービス不足婚活パーティー寄付金執行原発ビジネス
FBIチャイニーズタイホテル売上事務所ガチャ決算ガチャキャンペーン(販売報道陣過激派組織向携帯最新情報提供終了
校長発言細心注意ノートン産廃エラー(著作権クレーム中国反応融資高額教育費)(中国捕鯨団体40代社員サッカーコメント
高額入学金ヤフウ新橋大学ヤフウ新橋理事長FX経費 おじや50代資産ガリバズフィード40代エリート
0507デフォルトの名無しさん
垢版 |
2016/09/01(木) 10:06:22.99ID:xECgA5Px
C++ならクラス作ってクラスの操作関数を多数登録できますが、Cの構造体で同じことをやろうとしたらどう書くのでしょうか?
0509507
垢版 |
2016/09/01(木) 14:04:29.32ID:xECgA5Px
>>508
なるほど、そういうやり方なんですね!ありがとうございます。
0511デフォルトの名無しさん
垢版 |
2016/09/01(木) 20:46:50.70ID:8Xtys+zE
>>508
構造体に関数ポインタ持たすの意味なくね?
0512デフォルトの名無しさん
垢版 |
2016/09/02(金) 14:03:28.83ID:Z98P2xof
int main(){

char a[20];

char b[20];



scanf("%[^abc]", a);

printf("a[] = %s\n", a);

scanf("%s", b);

printf("b[] = %s\n", b);



return 0;

}
2回入力できないのは、なんで?
0513デフォルトの名無しさん
垢版 |
2016/09/02(金) 16:55:30.86ID:Z0wyfFLe
ネットから拾ってきたソースを参考にしています。
2つのファイルをマージして、コードからメッセージを参照するハッシュリストを
なのですが、どうも無限ループに陥ってしまっているようなのです。

hashlist_lookupのwhile脱出条件であるNULLをhashlist_add内で
セットしなければいけないのはわかるのですが、どのようにすればいいのでしょうか?
0514513
垢版 |
2016/09/02(金) 16:55:55.38ID:Z0wyfFLe
メインはこのようになっております(関連部分だけの抜粋です)
static struct hashlist message_list;

ハッシュリストの作成部分
 hashlist_create( &message_list, 2048, 682 );

マージしてハッシュへ登録部分
  if( src1id == src2id ) {
   src1ptr += 7 + src1len;
   src2ptr += 7 + src2len;
   hashlist_add( &message_list, src2id, destptr );
  } else
  if( src1id > src2id ) {
   src2ptr += 7 + src2len;
   hashlist_add( &message_list, src2id, destptr );
  } else {
   src1ptr += 7 + src1len;
   hashlist_add( &message_list, src1id, destptr );
  }

ハッシュリストを参照する部分(hashlist_lookup内で無限ループ)
 struct hashnode* node = hashlist_lookup( &message_list, message_id );
 return node ? (char*)node->info : "(null)";
0515デフォルトの名無しさん
垢版 |
2016/09/02(金) 16:56:34.44ID:Z0wyfFLe
以下、ハッシュ関連
struct hashnode {
 struct hashnode* next;
 u32 keycode;
 void* info;
};

struct hashlist {
 struct hashnode* current;
 struct hashnode** table;
 int current_table;
 struct memblock memblock;
 int tablesize;
 int n_items;
};
0516513
垢版 |
2016/09/02(金) 16:57:38.59ID:Z0wyfFLe
void hashlist_create( struct hashlist* _list, int _tablesize, int _bufsize )
{
 memblock_create( &_list->memblock, sizeof(struct hashnode), _bufsize );
 _list->table = (struct hashnode**)xmalloc( sizeof(struct hashnode*) * _tablesize );
 _list->current = _list->table[0];
 _list->tablesize = _tablesize;
 _list->current_table = _list->n_items = 0;
 memset( _list->table, 0, sizeof(struct hashnode*) * _tablesize );
}
struct hashnode* hashlist_add( struct hashlist* _list, u32 _keycode, void* _info )
{
 struct hashnode* node = (struct hashnode*)memblock_alloc( &_list->memblock );
 node->keycode = _keycode;
 node->info = _info;
 node->next = _list->table[_keycode % _list->tablesize];
 _list->table[_keycode % _list->tablesize] = node;
 _list->n_items++;
 return node;
}
struct hashnode* hashlist_lookup( struct hashlist* _list, u32 _keycode )
{
 struct hashnode* node = _list->table[_keycode % _list->tablesize];

 while( node ) {  //ここで無限ループ
  if( node->keycode == _keycode )
   return node;
  node = node->next;
 }
 return NULL;
}
0517デフォルトの名無しさん
垢版 |
2016/09/02(金) 21:52:40.48ID:96M6CE+e
>>512
scanf() の [...] 変換指定子なんて初めて見たよ。
調べたところ、以下のような動作をするみたいね。

scanf("%[^abc]", a);
配列aには a, b, c 以外の文字が入る
(入力文字列の先頭から a か b か c の直前までをaに格納)

上の入力で配列aに格納されなかった分はバッファに残る

scanf("%s", b);
すでにバッファに入っている内容を配列bに格納して関数終了
(配列aへのscanf()を終了させたa, b, cから始まる文字列が待機してるはず)


というわけで入力操作は、
a, b, c を含まない間は scanf("%[^abc]", a); が完了しない
scanf("%[^abc]", a); が完了したら、その途端に scanf("%s", b); も完了
0518デフォルトの名無しさん
垢版 |
2016/09/02(金) 23:01:39.58ID:XSBirivx
scanfのスキャン集合はよく使われる機能だよ

>>512
2回入力、というのは改行キー(エンターキー)を押して2回入力した、という意味で
使ってるんだろうけど、スキャン集合を使うと改行も入力文字として扱うようになるから、
つまり改行キーがエンターするキーではなくなってるのが、理由。

ttyのcookモードの観点では依然改行でエンターだけど、まあそれは別の話


>>514
引用の範囲は問題ない
http://codepad.org/yoBUyHMg
0519513
垢版 |
2016/09/03(土) 00:17:02.45ID:tOiz1lLB
>>518
返信有難うございます
他の部分の調査を行ってみます
お手数をお掛けしてすみませんでした
0521デフォルトの名無しさん
垢版 |
2016/09/07(水) 01:06:00.69ID:7cFIJKpv
>>520
いやいや>>508の前提では意味ないと思う。
逆に聞きたいんだが、どういうふうに使うのか、もしくはどんな利点があるのか、教えてくれたら嬉しい。
0522デフォルトの名無しさん
垢版 |
2016/09/07(水) 03:52:15.46ID:rkt8kSNa
>>521
用途は質問趣旨でメソッド風に使う。
利点は質問者なりにあるんじゃないの。
何故無意味と思うのか具体的に書かないと誰も答えられないと思う。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況