雑談掲示板(赤猫団/白犬隊)

C言語メモスレッド
  • 日時: 2024/05/31 11:15
  • 名前: 大魔王 (ID: m5ITiFA6)

今後は複数メモスレを立てずに
こちらのスレッドにまとめます。

Page: 1 | 全部表示 スレ一覧 新スレ作成
Re: C言語メモスレッド ( No.1 )
  • 日時: 2024/05/31 11:45
  • 名前: あは (ID: PkGNJuMC)

新スレ立てるなら前のロックした方が良いですよ
また叩き好きな人に文句言われちゃうよw

Re: C言語メモスレッド ( No.2 )
  • 日時: 2024/05/31 12:17
  • 名前: れもん ◆jojo/YwTEc (ID: vNpZk0wP)

>>0お前ェェェェェェーーーーー!!!!!雑談板に建てんなつってんだろーがァァァァァクソ野郎ォォォォォ


関係ないけどウサギパイセンいいよね

自治行為(笑)だけするって一番の荒らしみたいなもんでしょ ( No.3 )
  • 日時: 2024/05/31 15:13
  • 名前: MZ ◆xlR/KEgxTw (ID: d2m8gQSS)

>>1
あ!妖怪ウォッチの掲示板なのにポケモンスクランブルフレコ交換のスレ作ったイシイさんじゃん!
さすがイシイさんは目の付け所が違うなぁ。会話レスはせずにただ注意だけをする姿、尊敬してます!

面倒くさいんで証拠貼っておきます!!
ttp://y-watch.info/busters/bbs_talk/index.cgi?mode=view&no=2336
上記スレの>>3の書き込みIDがPkGNJuMCで今スレの>>1のIDと一致、あとは>>0のIDをGoogle検索したらほぼ確です!!やっぱりあはさん名前変えること多いですね!「ラ・フランス男」、「ガビ」「にゃめこ」「ゼロ」「名無し」「イシイ」「通りすがり」「娘娘」「メチャボケ委員長」「テン」「KOKIA」「草」「てんかす」「みょーん」「信者」「ピッキー」とか名前に色々なレパートリーがあるのは羨ましいですが、多すぎると大変ですよ!


>>2
正直スレ乱立しても別にキレる必要ないと思いますけど...
乱立したらしたで通報すればアク禁されやすくなりますし、見てる側からしたら面白いじゃん。
まあ自分含めて毎回反応するやつがいるってのも面白いですね。たぶんれもんさんアク禁されたのってこういうことの積み重ねが原因だと思うよ。

sage

Re: C言語メモスレッド ( No.4 )
  • 日時: 2024/06/01 06:54
  • 名前: れもん ◆jojo/YwTEc (ID: 8AmgEJ1q)

>>3
楽しければよかろーなのだ

Re: C言語メモスレッド ( No.5 )
  • 日時: 2024/06/05 02:30
  • 名前: 大魔王 (ID: EnAIxhAU)

入力した文字列(配列)から
特定の文字を抜き出す方法

#include <stdio.h>
int main(void){

char name[64] = {"darklord"};

printf("%s\n",name); //表示

printf("%c",name[3]);

}

実行結果
darklord
k

name[0] = d
name[1] = a
name[2] = r
name[3] = k
name[4] = l
name[5] = o
name[6] = r
name[7] = d

つまり、name[3]を表示するってことは
name[3番目]の「k」を表示するっていう意味なんだ。
将来、プログラマーやゲームプログラマーになりたい人は
「文字列」や「配列」は
よく使うから覚えて損はないぜ。

Re: C言語メモスレッド ( No.6 )
  • 日時: 2024/06/05 02:26
  • 名前: 大魔王 (ID: EnAIxhAU)

>>No.5追記

printf("%s\n",name);

printf("%c",name[3]);

これの違いは
%sは文字列を表示
%cは文字を表示
つまり、文字列の中から
特定の文字だけを抜き取りたい時は
「%c」を使うのが基本なんだよ。

Re: C言語メモスレッド ( No.7 )
  • 日時: 2024/06/05 04:05
  • 名前: 大魔王 (ID: EnAIxhAU)

じゃあ今度はもっと難しい文字列のプログラムいくよ。
「文字列リテラル」だ。
ここでは「const char*」を使うぜ。

ポインタ使う関係上、そこそこ難しいかも。
ではプログラム内容見るがいい。


#include <stdio.h>
int main(void){

const char *name[] = {"Darklord","Beelzebub"+4,"Lamia","Melusine"};

for(int i = 0; i < sizeof(name)/sizeof(name[0]); i++){
printf("%s",name[i]); //文字列表示
printf(" %c\n",*name[i]); //文字表示
}

}

実行結果
Darklord d
zebub z
Lamia L
Melusine M

これだけ見ても意味わかんないよね。
じゃあ教えてあげるよ。
ttps://daeudaeu.com/c-literal/
(ここを見ると分かりやすいかも。ただし、結構難しいのでポインタから先に学んだほうがいいかも。リンク先のサイトが気になるならURLをコピーしてhを付け足してくれ)

まず、const char*の配列があるよね?
その中には
"Darklord",(ダークロード)
"Beelzebub"+4,(ベルゼブブ)
"Lamia",(ラミア)
"Melusine"(メリュジーヌ)

で、ベルゼブブの文字列を
printfで表示しようとすると
Beelzebub
ではなく
「zebub」と表示されるよね?
実はこれ、
文字列の先頭アドレス(B)から
+4つ先の「z」から終端文字までを表示するんだ。
だから
Beel「zebub(最後のbの1つ先に見えないが終端文字が入っている)」
まで表示するっていう意味なんだよ。
あと、%cでBeelzebubを表示する時は
Beelzebubから特定の文字だけを表示するんだけど
「"Beelzebub"+4」と書いている以上は
Beelzebubの先頭(Bから4つ先の「z」だけを表示するのだ。もしこれが+5なら「e」になるし、+6なら「b」になるね)

で、↓のプログラムの意味だが
printf("%s",name[i]);
printf("%c\n",*name[i]);

%s(文字列表示)の場合
この場合は「name[i]」に「*(アスタリスク)」は
付けなくてもいいんだけど
%c(文字表示)の場合は
文字列から特定の文字(1文字)だけを表示するわけだから
例えば
「ABCDE」で「C」だけを表示したいときは
「*name[i]」にしなければいけないんだ。
で、このiは今回の場合は繰り返し文に出てくる変数で
for(int i = 0; i < sizeof(name)/sizeof(name[0]); i++)
これの意味だが
最初はiは0から始まって
iが「sizeof(name)/sizeof(name[0]);(配列のサイズ分)」になるまで
iを1ずつ変えて繰り返しを続けるっていう意味になるんだ。
i++は「1ずつ変える」っていう意味だからね。
で、今回の場合は
"Darklord",(ダークロード)1人目
"Beelzebub"+4,(ベルゼブブ) 2人目
"Lamia",(ラミア)3人目
"Melusine"(メリュジーヌ)4人目
4人分(4つ分のサイズ)だから
sizeof(name)/sizeof(name[0]);には
「4」が入るね。
だから
for(int i = 0; i < sizeof(name)/sizeof(name[0]); i++)
これはiが0から始まって
4より小さい間はiを1ずつ変えて
iが4になったら繰り返し文を抜けるって意味になるんだ。
つまり、こういう事だ↓
1回目のiは0
2回目のiは1
3回目のiは2
4回目のiは3

for(int i = 0; i < sizeof(name)/sizeof(name[0]); i++){
printf("%s",name[i]); //文字列表示
printf(" %c\n",*name[i]); //文字表示
}
↓これでiの値によって今、何人目なのかが分かるわけだ。
const char *name[] = {"Darklord","Beelzebub","Lamia","Melusine"};

これは
name[0]はDarklord
name[1]はBeelzebub(今は+4を消してます)
name[2]はLamia
name[3]はMelusine
だけどいちいちこんなふうに書いてたらめんどくさいから
name[i]にして
for(i = 0; i<4; i++)にして
printf("%s",name[i])と書けば
一気に4人分の名前を表示してくれる訳だ。
これ覚えておくと本当に便利だからな。
コンピュータでは配列は0から始まるから
1234のように1番目ではなく
0123のように0番目から始まるってのを覚えておこうぜ。

Re: C言語メモスレッド ( No.8 )
  • 日時: 2024/06/05 10:50
  • 名前: れもん ◆XSSH/ryx32 (ID: 1WkpJgXm)

舐めてる?

Re: C言語メモスレッド ( No.9 )
  • 日時: 2024/06/11 23:12
  • 名前: 大魔王 (ID: TBEdhI4u)

一筆書きソースコード

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

#define GYO 5 /* 迷路の行数 */
#define RETU 5 /* 迷路の列数 */

/* 迷路データ */
int meiro[GYO][RETU] = {
{1, 1, 1, 1, 1},
{1, 0, 0, 0, 1},
{1, 0, 1, 0, 1},
{1, 0, 0, 0, 1},
{1, 1, 1, 1, 1}
};

int px, py;
int a;
int count;

void print_screen(void);

void print_screen(void) {

system("cls");

for (int y = 0; y < GYO; y++) {
for (int x = 0; x < RETU; x++) {
if (x == px && y == py) {
printf("P");
}
else if (meiro[y][x] == 0) {
printf(" ");
}
else if (meiro[y][x] == 1) {
printf("■");
}
else if (meiro[y][x] == 2) {
printf("★");
}
}
printf("\n");
}

}


int main(void) {

px = 1;
py = 1;
a = 0;

do {

print_screen();

printf("px:%d py:%d\n", px, py);
printf("count:%d\n", count);

char key = _getch();

switch (_getch()) {
case 'w': a = 1; break;
case 's': a = 2; break;
case 'a': a = 3; break;
case 'd': a = 4; break;
}

if (a == 1) {
if (meiro[py - 1][px] == 0) {
py--;
meiro[py + 1][px] = 2;
count++;
}
}

if (a == 2) {
if (meiro[py + 1][px] == 0) {
py++;
meiro[py - 1][px] = 2;
count++;
}
}

if (a == 3) {
if (meiro[py][px - 1] == 0) {
px--;
meiro[py][px + 1] = 2;
count++;
}
}

if (a == 4) {
if (meiro[py][px + 1] == 0) {
px++;
meiro[py][px - 1] = 2;
count++;
}
}
} while (count < 7);

system("cls");

print_screen();

printf("px:%d py:%d\n", px, py);
printf("count:%d\n", count);
printf("CLEAR!");
}

Re: C言語メモスレッド ( No.10 )
  • 日時: 2024/06/12 06:25
  • 名前: 大魔王 (ID: n/dKIFvx)

二次元配列マップ
(3×3マスの盤面からどこに0または1があるかを教えてくれるよ。)
こっから派生して一筆書きなどを作る事も可能

#include <stdio.h>

int map[3][3] = {
{0,0,0},
{0,1,0},
{0,0,0},
};

int main(void){

for(int y = 0; y < 3; y++){

for(int x = 0; x < 3; x++){

printf("map:y[%d] map:x[%d]=%d\n",y,x,map[x][y]);

}

printf("\n");
}

}

Re: C言語メモスレッド ( No.11 )
  • 日時: 2024/06/12 07:00
  • 名前: れもん ◆jojo/YwTEc (ID: l4XRfLSH)

関係ないスレ立てやめて
無視しないでね

Re: C言語メモスレッド ( No.12 )
  • 日時: 2024/06/23 19:29
  • 名前: 大魔王 (ID: ThOnn7cR)

シャッフルのプログラム

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int GetRandom(int min, int max);

int main(void){

int i,j,temp;

srand((unsigned int)time(NULL));

int array[3] = {1,2,3};

for(i=0; i<3; i++){

j = rand() % sizeof(array) / sizeof(array[0]);

temp = array[i];
array[i] = array[j];
array[j] = temp;
}

for(int i = 0; i<sizeof(array) / sizeof(array[0]); i++){
printf("%d\n",array[i]);
}



}

Re: C言語メモスレッド ( No.13 )
  • 日時: 2024/06/24 04:02
  • 名前: 大魔王 (ID: IRMYHux8)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int GetRandom(int min, int max);

int main(void){

int x,y,x2,y2,temp;

srand((unsigned int)time(NULL));

int array[3][3] =
{
{1,2,3},
{4,5,6},
{7,8,9},
};

for(int y = 0; y<3; y++){
for(int x = 0; x<3; x++){

x2 = rand() % + 2;
y2 = rand() % + 2;

temp = array[y][x];
array[y][x] = array[y2][x2];
array[y2][x2] = temp;

}
}

for(int j = 0; j<3; j++){
for(int i = 0; i<3; i++){
printf("%d ",array[i][j]);
}
printf("\n");
}



}


二次元配列を使った
シャッフル処理のソースコードだ。
早速visual studioかpaizaのブラウザc言語実行サイトで
実行してみるといいよッ!!!
パズドラとか3マッチパズルとか
ああいう「行列」を使った入れ替える系のパズルゲームだと
絶対「二次元配列」のスワップ処理のプログラムが必要だから
ここのスレッドで二次元配列をシャッフルする方法を学んどくといいよ。


いやぁー
C言語ってすげえ難しいけど
うまく実行できた時のあの達成感と爽快感がマジパねぇ…!!!

Re: C言語メモスレッド ( No.14 )
  • 日時: 2024/06/24 04:08
  • 名前: 大魔王 (ID: IRMYHux8)

覚えたことは忘れないように
ちゃーんと掲示板にメモしておく。
これこそがオレ流の学習方法なのさ。
(自分のメモに保存するのもありだけど、うっかりメモ消しちゃったら怖いし)

Re: C言語メモスレッド ( No.15 )
  • 日時: 2024/07/12 23:14
  • 名前: れもん ◆jojo/YwTEc (ID: n/aWK7WB)

うん…がんばりなよ…長続きするように…

Re: C言語メモスレッド ( No.16 )
  • 日時: 2024/08/06 06:45
  • 名前: 大魔王 (ID: Z7rEPIw1)

>>れもん
応援ありがとう。(今更だけど)

荒らしはルール違反 ( No.17 )
  • 日時: 2024/08/06 13:15
  • 名前: れもん ◆jojo/YwTEc (ID: 2f5Ha3ah)

うおおおおおおおおおお
新せえええ

Re: C言語メモスレッド ( No.18 )
  • 日時: 2024/08/10 12:41
  • 名前: 大魔王 (ID: JEBrOd5L)

〜構造体&ポインタ有〜 不定期更新

#include <stdio.h>

typedef struct {
int x;
int y;
} PLAYER;

PLAYER player_data;
PLAYER *pdata;

int main(void){

player_data.x = 200;
player_data.y = 300;

pdata = &player_data;

printf("player_data.x = %d\n",player_data.x);
printf("player_data.y = %d\n",player_data.y);
printf("pdata.x = %d\n",pdata->x);
printf("pdata.y = %d\n",pdata->y);

pdata->x += 100;
pdata->y += 100;

printf("pdata.x = %d\n",pdata->x);
printf("pdata.y = %d\n",pdata->y);
}

ちゃんと動作します。
先月コロナにかかってしんどくてC言語出来なかったけど
久々に更新だぜ!!!
(これくらいのレベルのコードならいけるかも)

Re: C言語メモスレッド ( No.19 )
  • 日時: 2024/08/13 00:07
  • 名前: 大魔王 (ID: P9MojFx4)

&#12316;構造体+ポインタ&#12316;

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>


typedef struct {

int hp;

int atk;

int def;

char name[64];

} player;

typedef struct {

int hp;

int atk;

int def;

char name[64];

} enemy;

void player_status_print(player data);

void player_status_print2(player *pdata);

void enemy_status_print(enemy data2);

void enemy_status_print2(enemy* pdata2);

int main(void) {

player data;
player* pdata;
enemy data2;
enemy *pdata2;

pdata = &data;
pdata2 = &data2;

strcpy(data.name,"勇者");
data.hp = 999;
data.atk = 999;
data.def = 999;

player_status_print(data);

strcpy(data2.name, "魔王");
data2.hp = 500;
data2.atk = 500;
data2.def = 350;

enemy_status_print(data2);

pdata -> hp += 999;
pdata->atk += 999;
pdata->def += 999;

player_status_print(data);

data.hp += 999;
data.atk += 999;
data.def += 999;

player_status_print2(&data);

pdata2 -> atk += 50;

enemy_status_print(data2);

data2.atk += 50;

enemy_status_print2(&data2);


}

void player_status_print(player data) {

printf("名前:%s\nHP:%d\nATK:%d\nDEF:%d\n\n", data.name, data.hp, data.atk, data.def);

}

void player_status_print2(player *pdata) {

printf("名前:%s\nHP:%d\nATK:%d\nDEF:%d\n\n", pdata->name, pdata->hp, pdata->atk, pdata->def);

}

void enemy_status_print(enemy data2) {

printf("名前:%s\nHP:%d\nATK:%d\nDEF:%d\n\n", data2.name, data2.hp, data2.atk, data2.def);

}

void enemy_status_print2(enemy *pdata2) {

printf("名前:%s\nHP:%d\nATK:%d\nDEF:%d\n\n", pdata2->name, pdata2->hp, pdata2->atk, pdata2->def);

}

*
*
※ この欄には何も入力しないで下さい
*
(記事メンテ時に使用)

※ 動画などのアドレスを書き込む時は、hを抜いて「ttp://www.youtube.com/」のように入力して下さい。

*
スレッドをトップへソート

クッキー保存