C言語を今日から始める僕に1から教えるスレ
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/01/22(日) 21:39:320002デフォルトの名無しさん
2006/01/22(日) 21:40:200003デフォルトの名無しさん
NGNG#include <stdio.h>
main(argc, argv)
int argc;
char *argv[];
{
printf("%s: Hello, world!¥n", argv[0]);
return 0;
}
0004デフォルトの名無しさん
2006/01/22(日) 21:42:090005デフォルトの名無しさん
2006/01/22(日) 21:43:270006教官A
2006/01/22(日) 21:43:41まずは、自己紹介から始めてもらわんとな。
0007デフォルトの名無しさん
2006/01/22(日) 21:46:280008デフォルトの名無しさん
NGNGc++でもいいだろ
0009デフォルトの名無しさん
2006/01/22(日) 22:52:16ここまでに準備・用意したものを挙げろ。
0010デフォルトの名無しさん
2006/01/23(月) 01:26:20最初はCでいいんじゃない?教える人がいればいいけど、
Cがわかっているのが前提、というC++の本ばかりだし。
窓アプリが作れるようになるまで、続くといいけどなぁ。
0011デフォルトの名無しさん
2006/01/23(月) 12:44:39一人でやってろ
0012デフォルトの名無しさん
NGNGでもC++の方が簡単じゃね?
0013デフォルトの名無しさん
2006/01/23(月) 19:34:280014デフォルトの名無しさん
2006/01/23(月) 21:36:47better CとしてC++を使うと楽チンだけど、最初は範囲が広くて
困るんじゃないかなぁ。Cの基本を前提としないC++の本があれば
いいんだけどね。
Cをざっと早足で通してやって、C++からじっくりやるのがいいのかもね。
Cは知っていて損はないし。
0015デフォルトの名無しさん
2006/01/30(月) 02:56:220016ζ゚ ◆f3DF7bkpu2
2006/02/01(水) 20:30:08おk、HelloWork理解した。次こい!
0017デフォルトの名無しさん
2006/02/01(水) 21:23:020018ζ゚ ◆f3DF7bkpu2
2006/02/01(水) 21:25:40今トリビア見てるから。
0019ζ゚ ◆f3DF7bkpu2
2006/02/01(水) 21:45:01競馬予想プログラムとか組みたいぜ。
0020ζ゚ ◆f3DF7bkpu2
2006/02/01(水) 22:01:06#include <iostream>
int main(){
std::cout << "HelloWork" << std::endl;
return 0;
}
とか、ワケワカラナス
std::とか<<とか、いきなりこの仕打ちが挫折の原因と思う
0021デフォルトの名無しさん
2006/02/01(水) 22:48:53http://pc8.2ch.net/test/read.cgi/gamedev/1138703742/
【初心者】ステフと一緒にゲーム制作 Part3【歓迎】
http://pc8.2ch.net/test/read.cgi/gamedev/1137775298/
【初心者】スレを立てる前にココで質問を【Part11】
http://pc8.2ch.net/test/read.cgi/gamedev/1137730564/
超初心者だけどゲームの作り方教えてください
http://pc8.2ch.net/test/read.cgi/gamedev/1106056261/
ズブの初心者がゲーム作れるまで勉強するスレ
http://pc8.2ch.net/test/read.cgi/gamedev/1005132370/
初心者専用スレ「シミュレーションゲーム」を作らない?
http://pc8.2ch.net/test/read.cgi/gamedev/1079745509/
初心者たちが勉強しながらBattleCityを作るスレ
http://pc8.2ch.net/test/read.cgi/gamedev/1086075386/
【初心者】課題をクリアしていくスレ【講習会】
http://pc8.2ch.net/test/read.cgi/gamedev/1086858349/
初心者はC&Cで作れ(マターリ)
http://pc8.2ch.net/test/read.cgi/gamedev/1014973518/
PSソフト開発初心者質問スレッド
http://pc8.2ch.net/test/read.cgi/gamedev/1016821100/
初心者専用スレ「パックマン」風ゲーム作らない?
http://pc8.2ch.net/test/read.cgi/gamedev/1014326802/
0023デフォルトの名無しさん
2006/02/01(水) 23:33:29いや、それむしろ便利なところだから。
printf("hogehoge %d",i);って書くより、
cout << "hogehoge " << i << endl;
って書いた方が楽じゃね?
0024ζ゚ ◆f3DF7bkpu2
2006/02/02(木) 00:30:30見慣れれば大丈夫?
それはともかく、hogeってよく見かけるけど、何?
『 Hello,World! 』って?直訳すると「世界こんにちは」?
Hello,Welcome C(C++) language World! じゃね?
0025デフォルトの名無しさん
2006/02/02(木) 03:23:30あんたおもろいね。hogeっていうのは、適当な言葉さ。
特定の言葉入れる必要ないから、適当にいれているだけ。
Welcome,いいねー。ついでにいうとWelcome toだな。
で、開発環境とかはなに使っている?
0026ζ゚ ◆f3DF7bkpu2
2006/02/02(木) 08:19:50>>25
おもしろいやつとは何だ失礼なプンスカ
毛唐の言葉なんて覚える気まるでないッスよ。
Windows2000+VisualStudio.NET
.NETのいちばん最初のやつ。VBもC#も作れるぜ。
0027デフォルトの名無しさん
2006/02/02(木) 08:29:070028ζ゚ ◆f3DF7bkpu2
2006/02/02(木) 13:23:54前フリとは関係なく、てめえらのこと占ってやるから覚悟しやがれ。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
char *status[5]={"大吉","中吉","吉","末吉","凶"};
srand(time(NULL));
printf("今日の運勢は【%s】っぽ\n",status[rand()%5]);
return 0;
}
0029ζ゚ ◆f3DF7bkpu2
2006/02/02(木) 13:26:28どうせなら乱数の種つかわないで絶対【凶】になるようにするべきだったか
0030デフォルトの名無しさん
2006/02/02(木) 17:43:500031デフォルトの名無しさん
2006/02/02(木) 18:03:46しかしζ゚ ◆f3DF7bkpu2は、別にC初心者じゃないようだな。
このスレ、どう再利用する?
0032デフォルトの名無しさん
2006/02/02(木) 18:07:49#include <stdlib.h>
#include <time.h>
int main()
{
char *status[5]={"凶","大吉","中吉","吉","末吉"};
srand(time(NULL));
printf("今日の運勢は【%s】だお¥n",status[rand()%1]);
return 0;
}
0033デフォルトの名無しさん
2006/02/02(木) 18:19:01人間は余計なことせずに、コンパイラに数えさせろ。
0034ζ゚ ◆f3DF7bkpu2
2006/02/02(木) 18:28:25ウインドウに文字が書けないひとです。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *status[7]={"女神","大吉","吉","末吉","ぴょん吉","凶","豚"};
printf("今日の運勢は【%s】かもね\n",status[rand()%7]);
return 0;
}
0036デフォルトの名無しさん
2006/02/02(木) 18:43:14こうゆうことじゃない?
0037デフォルトの名無しさん
2006/02/02(木) 18:44:420038デフォルトの名無しさん
2006/02/02(木) 18:48:20#include <stdio.h>
#include <stdlib.h>
int main()
{
static char const * const status[]={"女神","大吉","吉","末吉","ぴょん吉","凶","豚"};
printf("今日の運勢は【%s】かもね\n",status[rand()%(sizeof(status) / sizeof(*status)]);
return 0;
}
0039ζ゚ ◆f3DF7bkpu2
2006/02/02(木) 18:48:24専ブラだとついsageてしまうぜ。
0040ζ゚ ◆f3DF7bkpu2
2006/02/02(木) 18:51:54const * constとか、もう何がなんだか。
0041デフォルトの名無しさん
2006/02/02(木) 18:56:56それはあれだ、
「静的な領域の」「変更不能な」「キャラ型の」「変更不能な」「ポインタの」「配列である」status
と言う意味だよ。
0042デフォルトの名無しさん
2006/02/02(木) 18:58:52const char * const → コンストなキャラのポインタもコンスト、
0043デフォルトの名無しさん
2006/02/02(木) 19:05:240044ζ゚ ◆f3DF7bkpu2
2006/02/02(木) 19:06:00「static」=性的な
「const」=不能
なんとなくおk
0045デフォルトの名無しさん
2006/02/02(木) 19:17:06文字列リテラルは変更不能なので、const宣言しておくべきなのです。
例:
char * p = "abc";
p[0] = 'A';
constつければエラー処理してくれるのです。
も少し便利な例:
strcat("abc", "def");
と書くと、宣言が
char * strcat(char *, const char *);
なのでエラーにナルです。
0046デフォルトの名無しさん
2006/02/02(木) 19:25:34constつけておけ、ということです。
0047ζ゚ ◆f3DF7bkpu2
2006/02/02(木) 21:26:00いかん、このままでは「名無しさん」に戻ってしまう
0048デフォルトの名無しさん
2006/02/02(木) 21:31:29VS,コマンドラインから使っている?そのままIDEでやってる?
0049ζ゚ ◆f3DF7bkpu2
2006/02/02(木) 21:45:06clでコンパイルできるようにはしてる。
0050デフォルトの名無しさん
2006/02/02(木) 21:54:18実際なにやってるかよくわかるしね。clでそのままコンパイルできるなら
小さいコードは、エディタとclでやると軽くていい感じ。
んじゃ、スタックとヒープってなんだかわかる?
0051ζ゚ ◆f3DF7bkpu2
2006/02/02(木) 22:37:59//TODO ここに目的のコードを書く
で挫折したからな。勝手にコード作られるのはうざい。
で、
「スタック」 FILOとか後入れ先出しとか。言葉だけでCの実装はシラネ
「ヒープ」 聞いたことあるけど不明。言われたら多分「あ、それ知ってる」と思
0052ζ゚ ◆f3DF7bkpu2
2006/02/02(木) 23:08:51staticの「静的な」を実感するため、こんな感じで書いてみた。
#include <stdio.h>
int count(void)
{
static int a=0;
return(++a);
}
int main(void)
{
int i;
for(i=0;i<5;i++)printf("%d ",count());
printf("\n");
return 0;
}
0053デフォルトの名無しさん
2006/02/02(木) 23:16:09ヒープってところに作られるんだ。んで、そういうのつけないで関数の
中で宣言したのは、スタックってところに作られるんだ。
だから、前の問題だしたのさ。
でも>>52はほっといても大丈夫っぽいな。燃料ないわw
なんかいいの思いついたらくるわ。んじゃ。
0054デフォルトの名無しさん
2006/02/02(木) 23:23:02人間、良いことばかり気にしてちゃイカンよ。
0055ζ゚ ◆f3DF7bkpu2
2006/02/02(木) 23:27:44関数呼び出しのたびに使い捨てとおもってたから。
ありがとう友よ
GJ俺
あしたの俺はもっとでっかいぜパンツからはみ出すぐらいに!
0056デフォルトの名無しさん
2006/02/02(木) 23:28:07なんだかんだ言って、結構センスいいポイント突いてるね。
そのcount()関数みたいなやり方はシングルスレッド限定だけどよくある手法だよ。
そこで問題、
>52のcount()と次のコードの違いはなんでしょう。
static int a=0;
int count(void)
{
return(++a);
}
0058デフォルトの名無しさん
2006/02/02(木) 23:37:20static変数の領域はヒープではない。
005953
2006/02/03(金) 01:04:56>>58指摘ありがとう。そう、staticはヒープではないね。
ヒープはmallocで動的に確保される領域だから。関数が抜けても
値が保持されるのは同じような性質だけど。
0060デフォルトの名無しさん
2006/02/03(金) 01:05:26まず
#
0061ζ゚ ◆f3DF7bkpu2
2006/02/03(金) 01:07:03おk理解したwww
粘着してるわけじゃなくて今戻ってきたとこ。
ブログ更新してた。
0062デフォルトの名無しさん
2006/02/03(金) 01:26:53#include <stddef.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#ifndef B_SIZE
#define B_SIZE (8192)
#endif /* !B_SIZE */
#define HTTP_PORT 80
#define PROTO "tcp"
void err_exit(char *mes1, char *mes2);
int write1line(int fd, char *str);
char linebuf[B_SIZE]; /* Buffer for Readline */
int linebuf_start, linebuf_end;
void init_linebuf(void);
int read1line(int fd, char *buf, int max);
int readbuf(int fd, char *buf, int max);
0063デフォルトの名無しさん
2006/02/03(金) 01:27:50{
char *hostname, *path;
unsigned short port;
struct sockaddr_in sin;
struct hostent *hentp;
struct protoent *pentp;
int sock, len;
char buf[B_SIZE];
switch (argc) {
case 3:
port = HTTP_PORT;
path = argv[2];
break;
case 4:
port = atoi(argv[2]);
path = argv[3];
break;
default:
fprintf(stderr, "usage: %s hostname [port] path\n", argv[0]);
exit(EXIT_FAILURE);
}
hostname = argv[1];
0064デフォルトの名無しさん
2006/02/03(金) 01:28:37memset(&sin, 0, sizeof (sin));
sin.sin_family = AF_INET;
if ((hentp = gethostbyname(hostname)) == NULL) {
err_exit("gethostbyname", "can't get address");
}
memcpy(&sin.sin_addr, hentp->h_addr, hentp->h_length);
sin.sin_port = htons(port);
if ((pentp = getprotobyname(PROTO)) == NULL) {
err_exit("getprotobyname", "can't get protocol number");
}
if ((sock = socket(PF_INET, SOCK_STREAM, pentp->p_proto)) < 0) {
err_exit("socket", NULL);
}
/* Connect to a Server */
if (connect(sock, &sin, sizeof (sin)) < 0) {
err_exit("connect", NULL);
}
/* Send Request */
if (snprintf(buf, B_SIZE, "GET %s HTTP/1.0", path) < 0) {
err_exit("snprintf", NULL);
}
if (write1line(sock, buf) < 0) {
err_exit("write1line", NULL);
}
0065デフォルトの名無しさん
2006/02/03(金) 01:29:07if(snprintf(buf, B_SIZE, "Host: %s\r\n", hostname) < 0) {
err_exit("write1line", NULL);
}
if (write1line(sock, buf) < 0) {
err_exit("write1line", NULL);
}
if (write1line(sock, "") < 0) {
err_exit("write1line", NULL);
}
/* Receive Response */
init_linebuf();
/* Receive Status Line */
if ((len = read1line(sock, buf, B_SIZE)) < 0) {
err_exit("read1line", NULL);
}
fprintf(stderr, "Status-Line = %s", buf);
/* Receive Headers */
while ((len = read1line(sock, buf, B_SIZE)) > 0) {
if (!strcmp(buf, "\r\n")) break;
fprintf(stderr, "Header-Field = %s", buf);
}
if (len < 0) {
err_exit("read1line", NULL);
}
fprintf(stderr, "--------------------\n");
0066デフォルトの名無しさん
2006/02/03(金) 01:30:26if (len < 0) {
err_exit("read", NULL);
}
fprintf(stderr, "--------------------\n");
/* Disconnect */
if (close(sock) < 0) {
err_exit("close", NULL);
}
}
void
err_exit (char *mes1, char *mes2)
{
if (mes2 == NULL) mes2 = strerror(errno);
fprintf(stderr, "%s: %s\n", mes1, mes2);
exit(EXIT_FAILURE);
}
0067デフォルトの名無しさん
2006/02/03(金) 01:31:54{
int l;
l = strlen(str);
if (write(fd, str, l) < 0) return (-1);
if (write(fd, "\r\n", 2) < 0) return (-1); /* CR-LF */
return (0);
}
void
init_linebuf (void) /* Initialize Buffer */
{
linebuf_start = 0;
linebuf_end = 0;
return;
}
0068デフォルトの名無しさん
2006/02/03(金) 01:35:03read1line (int fd, char *buf, int max) /* Read 1-line from Socket */
{
int i, j, st;
if (max <= 0) return (0);
j = 0; st = 0;
for (;;) {
if (linebuf_start >= linebuf_end) { /* Buffer is Empty */
if ((linebuf_end = read(fd, linebuf, B_SIZE)) < 0) return (-1);
if (linebuf_end == 0) { /* End of File */
buf[j] = '\0';
return (j);
}
linebuf_start = 0;
}
for (i = linebuf_start; i < linebuf_end; i++) {
if (j >= max - 1) { /* Buffer is Full */
linebuf_start = i;
buf[j] = '\0';
return (j);
}
0069デフォルトの名無しさん
2006/02/03(金) 01:36:13switch (linebuf[i]) {
case '\r': /* CR */
st = 1;break;
case '\n': /* LF */
if (st == 1) { /* End of Line */
linebuf_start = i + 1;
buf[j] = '\0';
return (j);
}
default:
st = 0;break;
}
}
linebuf_start = i;
}
}
int readbuf (int fd, char *buf, int max) /* Read from Buffer and Socket */
{
int l;
if (linebuf_start < linebuf_end) {
l = linebuf_end - linebuf_start;
if (l > max) l = max;
memcpy(buf, linebuf + linebuf_start, l);
linebuf_start += l;
return (l);
}
return (read(fd, buf, max));
}
0070デフォルトの名無しさん
2006/02/03(金) 01:38:05わかんないとこあったら聞け。
ブラウザの基本・・・でもないか。
0071デフォルトの名無しさん
2006/02/03(金) 02:44:15横からだが・・・
UNIX系だね。ネットワークアプリは手を出したことがないから
興味あったけど、メインはWINだから残念。でも参考にさせて
もらうよ。サンクス
0072ζ゚ ◆f3DF7bkpu2
2006/02/03(金) 09:24:08static char const * const status[]{...} の1行より興味を惹かないなあ。
あれだ。
「倉庫番」でいう、だだっ広い散らかった面よりちっちゃい面の方が好き。
今は>>54の要望に応えつつマニアックなアプローチを考えている。
0073デフォルトの名無しさん
2006/02/04(土) 15:27:20void main()
{
printf ("string");
}
をプロンプトから実行しても文字が表示されないのは設定がいるんですか?winXPで。
borlandC++5.5.1
0074デフォルトの名無しさん
2006/02/04(土) 15:27:570075デフォルトの名無しさん
2006/02/04(土) 16:00:38printf("string\n");
に直してみれ。
0076デフォルトの名無しさん
2006/02/04(土) 16:35:34ついでにint main()。
stdio.hは標準だから<stdio.h>とするのが普通。
0077ζ゚
2006/02/04(土) 21:38:440078ζ゚
2006/02/05(日) 17:30:00ζ゚
今日はウインウインでフラッシュ演算つくろうと頑張った。
表示までできました。問題点は多々あるが形だけは。
入力受け付ける方法がわからなかった。
0079ζ゚
2006/02/05(日) 17:35:40ζ゚
もうひとつ、コンソールで「石取りゲーム」作った。
「CPUが○個取りました」では味気ないので応答メッセージ出してたら
なんの神様が降臨したのか、気が付いたら関西系おにゃのこになってました。
めっちゃかわええ。結婚してくださいw
0080デフォルトの名無しさん
2006/02/06(月) 03:55:250081よいしょ
2006/02/06(月) 03:56:33オマイラが俺様にプログラムを教えてあげれるスレ
http://pc8.2ch.net/test/read.cgi/tech/1139074310/l50
C言語を今日から始める僕に1から教えるスレ
http://pc8.2ch.net/test/read.cgi/tech/1137933572/l50
田中彰の応援歌を考えた。
http://pc8.2ch.net/test/read.cgi/tech/1139002576/l50
我こそはSE職人さん!集まって下さーい\(^o^)/
http://pc8.2ch.net/test/read.cgi/tech/1138765471/l50
エンディアン嘘つかない
http://pc8.2ch.net/test/read.cgi/tech/1138500749/l50
0082ζ゚
2006/02/06(月) 09:50:03ちくしょう2位かよ!
でも1位の壁は厚いからなあ。DQNレベルが違いすぎる
0083ζ゚
2006/02/06(月) 10:25:48ttp://pc8.2ch.net/test/read.cgi/tech/1139118159/
0084デフォルトの名無しさん
2006/02/07(火) 13:18:590085 ◆U8V9D2Qx0c
2006/02/07(火) 13:20:07008684
2006/02/07(火) 13:24:28知らんがな。
008784
2006/02/07(火) 13:25:470088デフォルトの名無しさん
2006/02/07(火) 13:33:360089デフォルトの名無しさん
2006/02/07(火) 20:26:060090ζ゚
2006/02/07(火) 22:15:29#include<stdio.h>
int main(void){
int n,c,t;
for(c=0;c<11;++c,printf("\n"))
for(printf("%*s",(11-c)*2,""),n=0,t=1;n<=c;t*=c-++n+1,t/=n)printf("%3d ",t);
return 0;
}
0092デフォルトの名無しさん
2006/02/08(水) 12:07:020093ζ゚
2006/02/15(水) 15:15:42習作・国盗りSLGが作りたい!
ttp://gamdev.org/up/img/4660.zip
マップ表示部分だけですが、案外よくできたので。
この先の、内政とか戦闘とかが構想まるで無しwww バロス
0094デフォルトの名無しさん
2006/02/16(木) 21:55:19main(argc, argv)
int argc;
char *argv[];
{
printf("%s: Hello, world!¥n", argv[0]);
return 0;
}
0095携帯で書いた暇人
2006/02/17(金) 02:38:15void flush(int n,FILE* fp){ if (n) putc(n-1,fp); }
void main(int ac,char *av[]){
FILE *fi,*fo;
int c=EOF,r=0,n;
if (ac==3){
fi=fopen(av[1],゙rb゙);
fo=fopen(av[2],゙wb゙);
if (fi && fo){
while ((n=getc(fi))!=EOF){
if (n==c){
if (!r) putc(c,fo);
if (++r==256){
flush(r,fo);
r=0,c=EOF;
}
}
else{
flush(r,fo);
r=0,c=n;
putc(c,fo);
}
}/* end while */
flush(r,fo);
}
if (fi) fclose(fi);
if (fo) fclose(fo);
}
}
0096デフォルトの名無しさん
2006/02/17(金) 10:56:20ただし、定義されたソースファイルの関数だけで、他のソースファイルの関数から参照することはできません。
なおstatic変数は静的にデータとして確保されますが、価を指定して宣言した場合のみデータ領域に配置され、初期値を指定しない場合はスタック領域の先頭に領域が確保されますよ。
コンパイラが領域確保のコードをリンクするので、そこらへんはあまり意識する必要もないかと。
constは値を指定した場合のみ、定数がデータ領域に確保されます。
ただし整数なら最適化の段階でmov ax,1234みたいにコード展開されることも有り得ます。
文字列ならデータ領域に配置されると考えていいでしょう。
ちなみにヒープは二分木のことで、スタック領域を二分木で管理してmalloc等が利用できるようにしていたため、動的に割当解放できるスタック上のデータ領域をヒープ領域と呼ぶようになったみたいです。
0097ζ゚
2006/02/17(金) 12:18:16コンソールで素数を数えるプログラムを組んだとき、int型で20億ぐらいまでまわったんで
うちの環境じゃint=32bitで10進9桁は保証されてると思ってたんだけど
Windowsアプリ作ったら、どうも16bit臭い。32767以下しか出てないっぽい。
コンパイル時になにかやってるのかな?ζ゚ の脳が膿んでる?
それと。
実行ファイル配布したときにも、実行環境によってintが16bitだったり32bitだったりする?
ζ゚ の感覚では、型宣言はコンパイラに対してで、奴(コンパイラ)がint=32bitだと解釈して
exeファイル作ったら、どこに持っていっても32bitの領域確保すると思ってる。
0098デフォルトの名無しさん
2006/02/17(金) 14:43:03ビット数になっている筈のものだ。但し Windows 関係は
歴史的な事情により過去の16ビットマシンだった時によく
使われた int が 16 ビットのコンパイラも現在のCPUで
動作させることが可能になっている。こういったコンパイラを
使った場合は int が最適なビット数にはなってないかも
知れない。
0099デフォルトの名無しさん
2006/02/17(金) 15:26:23嘘だらけ。
>初期値を指定しない場合はスタック領域の先頭に領域が確保されますよ。
いいえ。
>コンパイラが領域確保のコードをリンクするので
いいえ。
>constは値を指定した場合のみ、定数がデータ領域に確保されます。
いいえ。
>ヒープは二分木のことで
いいえ。
>スタック領域を二分木で管理してmalloc等が利用できるようにしていたため
いいえ。
>動的に割当解放できるスタック上のデータ領域をヒープ領域と呼ぶようになったみたいです。
いいえ。
0100デフォルトの名無しさん
2006/02/17(金) 15:29:24>32bitの領域確保すると
必ずしも領域が確保されるわけではないが、「コンパイラに対する指定」という点ではその通り。
>Windowsアプリ作ったら、どうも16bit臭い。
これは恐らく、「Windowsでアプリを作ったら」だと思うが。
例えばWindows上でも動作可能なLSI-Cは、intが16bitなのは>98も書いている通り。
0101ζ゚
2006/02/17(金) 17:54:24<Windows.h>関係なかった。
ヒント:RAND_MAX (´・ω・)
0102デフォルトの名無しさん
2006/02/17(金) 20:21:250103デフォルトの名無しさん
2006/02/17(金) 20:28:040104デフォルトの名無しさん
2006/02/17(金) 21:30:430105デフォルトの名無しさん
2006/02/17(金) 21:35:000106デフォルトの名無しさん
2006/02/17(金) 23:14:02いい加減にしろ
0107デフォルトの名無しさん
2006/02/17(金) 23:24:140108デフォルトの名無しさん
2006/02/18(土) 09:02:28たった今やっと読破してきた。次は何をやればいい?
0109デフォルトの名無しさん
2006/02/18(土) 09:12:580110デフォルトの名無しさん
2006/02/18(土) 09:25:250111ζ゚
2006/02/18(土) 09:47:300112ζ゚
2006/02/18(土) 10:16:52#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
int r,s;
srand((unsigned)time(NULL));
r=rand()%9+1;
while(1){
puts("数(1〜9):");scanf("%d",&s);
if(r==s){puts("正解!");break;}
else if(r>s)puts("小さい!");
else puts("大きい!");
}
}
0113デフォルトの名無しさん
2006/02/18(土) 10:20:18void main (void)
{
int tokuten[5],gokei=0,i;
printf("英語・国語・数学・理科・社会の順に得点を入力して下さい\n");
for(i=0;i<5;i++)
scanf("%d",&tokuten[i]);
for(i=0;i<5;i++)
gokei+=tokuten[i];
printf("5科目の合計点は%d点です\n",gokei);
}
なんでscanfの前にfor文が来るかわからない。
0114ζ゚
2006/02/18(土) 10:29:49ルール:
1.4桁の数字を用意。ただし、4桁の数字の中に、同じ数字は含まない。
→「1111」「2233」とかは不可
2.ユーザーからの入力に対し、
2.1. 数字と桁が合っていれば1hit
2.2. 桁が合ってないけどその数字を使っていれば1blow
2.3. 4桁すべて合えば(4hit)正解
例:問題「6514」
「1234」 → 1Hit 1Blow (「4」が桁も同じ、「1」は数字を使っているが桁が違う)
「5678」 → 0Hit 2Blow (「5」「6」が桁違い)
0115ζ゚
2006/02/18(土) 10:36:39まじめだから。
っつか、scanfの前にforいるでしょフォ〜〜
011696
2006/02/18(土) 10:54:16嘘ではないぞ。
もっともコンパイラに依存する点だから、俺の書いた通りにならない環境もあるがな。
実際に某社のコンパイラを数種類調べた上での書き込みだ。
なお、二分木はヒープである。ヒープソートの語源を調べてみ?
0117デフォルトの名無しさん
2006/02/18(土) 11:15:13たとえそうだとしてもスタック領域のうち動的メモリに使われる部分をヒープ領域と呼ぶというのは間違いだ。
ヒープはあくまでもヒープ。スタックとは全く関係ない。
あと、初期化子のない静的変数が置かれるのはBSSではないか?Cとは全く関係ないことだけど。
0118デフォルトの名無しさん
2006/02/18(土) 11:30:26おっしゃ〜〜〜!!ガンガル!!(^ω^)
0119デフォルトの名無しさん
2006/02/18(土) 11:40:040120デフォルトの名無しさん
2006/02/18(土) 12:29:04もの凄い勢いでスレ読んでるから仲間に入れろ
ちなみに授業で一回C言語やってるからすぐ追いつくはず
0121デフォルトの名無しさん
2006/02/18(土) 12:30:03{
int i, j, hit, blow;
hit = blow = 0;
// hit
for(i = 0; i < KETA; i++){
if(code[i] == user_code[i]){
hit++;
}
}
// blow
for(i = 0; i < KETA; i++){
for(j = 0; j < KETA; j++){
if(i != j && code[i] == user_code[j]){
blow++;
}
}
}
printf("code:%s\nuser_code:%s\n", code, user_code);
printf("%dHit %dBlow", hit, blow);
}
0122デフォルトの名無しさん
2006/02/18(土) 12:31:03{
int i, j, temp, flag;
char code[KETA + 1], user_code[KETA + 1], buff[KETA + 1];
randomize();
// ランダムコードの作成
code[0] = random(10);
for(i = 1; i < KETA; i++){
do{
flag = 0;
temp = random(10);
for(j = i - 1; j >= 0; j--){
if(code[j] == temp){
flag = 1;
break;
}
}
}while(flag);
code[i] = temp;
}
code[i] = '\0';
for(i = 0; i < KETA; i++){
code[i] += '0';
}
// ユーザコードの入力
printf("コードを入力しやがれ。\n>");
fgets(buff, KETA + 1, stdin);
sscanf(buff, "%d", &temp);
itoa(temp, user_code, 10);
Unko(code, user_code);
return 0;
}
0123むずかしいです><
2006/02/18(土) 12:31:34#include <stdlib.h>
#include <math.h>
#define KETA 4
0124デフォルトの名無しさん
2006/02/18(土) 12:34:14なんかスゲーな
2ちゃんねるがこんなに教育熱心だと思わなかった
0125初心者
2006/02/18(土) 12:46:150126116
2006/02/18(土) 12:50:08>あと、初期化子のない静的変数が置かれるのはBSSではないか?
正解。
後で読み返してみたら、俺も誤解を招くような書き方してたわ。
すまんかった。
0127デフォルトの名無しさん
2006/02/18(土) 12:50:15http://ja.wikipedia.org/wiki/%E3%83%92%E3%83%BC%E3%83%97
ちぃ、覚えた!
0128デフォルトの名無しさん
2006/02/18(土) 12:52:25ほとんど何もやってねーじゃんwww
0129デフォルトの名無しさん
2006/02/18(土) 12:54:23randの下一桁は質の悪い乱数になるので使わないほうがよい
0130デフォルトの名無しさん
2006/02/18(土) 13:02:444桁の数字を生成するときに総当りで重複をチェックするのは効率が悪いね
もっと計算量を減らせるはずだ
ヒントはrandを使う回数は何回まで減らせるか
0131ζ゚
2006/02/18(土) 13:06:43いいじゃん。
次は、なにしようか?
石取りゲーム(>>79)→3目並べ あたりまでしかネタ思いつかないス。
俺にもネタくれエロいひと
0132ζ゚
2006/02/18(土) 13:27:16上質を知るオトコになるにはどうすればよかばってん?
どぎゃんしたらよかっと?
0133デフォルトの名無しさん
2006/02/18(土) 13:35:59rand()*9/RAND_MAX+1
0134ζ゚
2006/02/18(土) 14:09:38なるほろ。そいつぁいいや。
と思ったが、違いがわからない。
#include <stdio.h>
#define RMAX 32767
int main(void)
{
int m[10]={0},n[10]={0};
int a=0,b=0,i;
for(i=0;i<RMAX;i++){
a=i%9;m[a]++;
b=i*9/RMAX;n[b]++;
}
for(i=0;i<9;i++)printf("%d: m[%d],n[%d]\n",i,m[i],n[i]);
}
結局、順番に分けていく(%)か、0〜*、*〜*と大きく切るかだけじゃねの?
rand()のストレスとかは詳しくシラネけど。
0135デフォルトの名無しさん
2006/02/18(土) 14:14:09>>131
>石取りゲーム(>>79)→3目並べ あたりまでしかネタ思いつかないス。
こいつが片付いたら、簡単なネタ出すよ
0136デフォルトの名無しさん
2006/02/18(土) 14:21:530137デフォルトの名無しさん
2006/02/18(土) 14:30:260138デフォルトの名無しさん
2006/02/18(土) 14:50:06__asm { a: jmp a }
0139デフォルトの名無しさん
2006/02/18(土) 14:52:35#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 4
void irnd(void);
void judg(char *data, char *arry);
char data[N+1],arry[N+1];
void irnd(void)
{
int i;
srand((int unsigned)time(NULL));
for(i=0;i < N; i++) arry[i] = rand() % 9 + 1;
}
void judg(char *data,char *arry)
{
int i,n,agree,blow;
for(i=0; i < N;i++){
for(n=0; n < N;n++){
if(arry[i] == data[i]) agree++;
else if(arry[i] == data[n]) blow++;
}
}
printf("問題の数字>%s\n入力の数字>%s\n",arry,data);
printf("Hit数→%d\nBlow数→%d",agree,blow);
}
0140デフォルトの名無しさん
2006/02/18(土) 14:53:36{
int i;
irnd();
printf("4桁の数字を入力\n");
for(i=0; i < N ;i++){
printf("%d桁目>",i+1); fgets(data,N+1,stdin);
}
judg(data,arry);
return 0;
}
0141デフォルトの名無しさん
2006/02/18(土) 14:54:34例えば、rand()の最下位ビットが必ず交互にOn/Offを繰り返す実装があったとする。
rand()%2したら、必ず違う値が続くことが予測できてしまうから質が悪いと言うことになる。
0142デフォルトの名無しさん
NGNGいまどきのコンパイラなら問題ないだろ。
0143デフォルトの名無しさん
NGNGRAND_MAXがINT_MAXと同じ処理系なら、まずくね?
0144デフォルトの名無しさん
2006/02/18(土) 15:16:340145デフォルトの名無しさん
NGNG0146ζ゚
2006/02/18(土) 15:28:38>>134組んでみたのは、実際どうなるか分からなかったから。
予想では、rand()*9/RAND_MAX側の「9」の値が9-RAND_MAX%9低くなる、
つまり一方的に「9」だけが出にくくなると読んでたんだが。
あと>>141の話、乱数のストレスの件
例えば、コイントスで完全に50%の確率で裏表が決まるとした場合、
計算上は10回連続で表が出る確率は1/1024だけど
コンピューターは「10回のうち5回表、5回裏」に持っていきたいから
1/1024の確率どおりにならない、結果がどちらか一方に偏るとストレスが溜まるという仮定。
「表」「表」と来たときに、次が「表」になる確率は1/2じゃないんじゃない?って話のタネ。
実際どうなってるのかは知らない。
0147ζ゚
2006/02/18(土) 15:36:13|
↓
0148デフォルトの名無しさん
2006/02/18(土) 15:37:11>141の実装だと、連続して表が出る確率は0になるね。
余りの問題に関しては、例えばrand()%9とした場合も均一ではなくなる。
仮にRAND_MAXが10の実装があったとすると、0の出る確率は2/10、1乃至8の出る確率は1/10になる。
0149デフォルトの名無しさん
2006/02/18(土) 15:38:41>>125
http://pc8.2ch.net/test/read.cgi/tech/1139570025/390
0150デフォルトの名無しさん
2006/02/18(土) 15:41:22#include<stdio.h>
sd(const char vc[])
{
int as=0;
while(vc[as])
as++;
return(as);
}
int main()
{
char ab[5];
printf("文字を入力してください:");
scanf("%s",ab);
printf("あなたが入力した文字の数は%d個です",sd(ab));
return(0);
}
これを実行させた時普段はちゃんと動いてたのに
「mikomikonasu」と入力したらなぜかバグった感じになったんだけど
原因分かる人いますか?
0151デフォルトの名無しさん
NGNGRAND_MAXは最低でも0x7fffじゃなかった?
0152ζ゚
2006/02/18(土) 15:52:06>ゲーム作りたいが今はマダマダ未熟で無理な奴の誓い
>ttp://pc8.2ch.net/test/read.cgi/gamedev/1138955951/5-7
が頭にあったから、>>133で「なるほど。」→「ん?」ってなった。
>>151の突っ込みは無粋。
>>148の話はすごくよくわかる。「仮に」って言ってんじゃん。
0153ζ゚
2006/02/18(土) 16:03:12>int main()
>{
>char ab[5];
入力は4文字以内でおながいします。
では、犬の散歩に行ってきます( ゚∀゚)ノシ
0154デフォルトの名無しさん
2006/02/18(土) 16:06:59ならばRAND_MAXが0x7fffだとしてrand() % 7ffeの場合を考えろ。
0155デフォルトの名無しさん
2006/02/18(土) 16:12:320156デフォルトの名無しさん
2006/02/18(土) 16:26:29非標準関数。
大まかに言うとint型の数値を文字列にしてそこへのポインタを返す。
そのメモリの扱いなどから使うことはお勧めできない。
0157デフォルトの名無しさん
2006/02/18(土) 16:29:08そうでしたか・・・。標準ライブラリ調べても無いからなぜ?と思ってた・・・。
非標準関数なんて存在を知らなかった。
解説ありがとうございます。
0158デフォルトの名無しさん
2006/02/18(土) 16:58:10ソース見ればいいんじゃないかな。もしくは、独自で実装。
でもメルセンヌ・ツイスタなヒット&ブローって一体・・・って
気がするけど
0159デフォルトの名無しさん
2006/02/18(土) 17:23:34ゲームにメルセンヌ・ツイスタを使うのは、厨房が一度は通る道。
麻疹みたいなものだ。
「うひょー、俺はこんなハイテク使っているze!!」ってやつ、な。
ま、生暖かい目で見守ってやれ。
0160ζ゚
2006/02/18(土) 18:11:56厨くさくなれるなら実装してみるか、メルセデス便器
0161デフォルトの名無しさん
NGNG0162デフォルトの名無しさん
2006/02/18(土) 21:53:18><
int Set_Random_Code(char *code)
{
int i, j, temp;
char flag[10];
memset(flag, 0, sizeof(char) * 10);
code[0] = random(10);
flag[ code[0] ] = 1;
for(i = 1; i < KETA; i++){
temp = random(10);
// 使われていない数字を検索
while(flag[temp] == 1){
temp++;
if(temp > 9){
temp = 0;
}
}
code[i] = temp;
flag[temp] = 1;
}
// 文字列化
for(i = 0; i < KETA; i++) code[i] += '0';
code[i] = '\0';
return i + 1;
}
0163ζ゚
2006/02/19(日) 00:25:34その方法だと、連続した数字が出やすくならないかい?
例えば3文字「867」と決まったあとで4文字目、
「0」〜「5」まで確率1/10、「6」「7」「8」は繰り上げ当選で「9」になるので
「9」の出る確率がなんと4割!
最悪の場合、こんなことになるかも。改悪しちゃった?
追伸:「コードブレーカー(暗号破壊)」は、女神転生シリーズで使われてた名称で
一般には「Hit&Blow」ですにゃ><
まあいいかなと思ってたけど、まさか他のスレに飛び火するとは・・・
0164デフォルトの名無しさん
2006/02/19(日) 01:38:57結構適当だけど。。。
int main(void) {
char target[4];
int i, j;
srand((unsigned) time(NULL));
for (i = 0; i < 4; i++) {
target[i] = rand() % 10 + '0';
}
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
if (i == j) continue;
if (target[i] == target[j]) {
target[i] = rand() % 10 + '0';
i = 0;
}
}
}
printf("%s\n", target);
return 0;
}
0165携帯で書いた暇人
2006/02/19(日) 01:45:37#include <stdio.h>
char* i_to_s(char* buf, int n)
{
char si[26],*di=buf;
int c=0;
while (n>=10){
si[c++]=(n % 10)+'0';
n = n / 10;
}
si[c++] = n + '0';
while (c){
*di++ = si[--c];
}
*di = '\0';
return buf;
}
void main()
{
char buf[24];
printf("%s\n",i_to_s(buf,32767));
}
0166デフォルトの名無しさん
2006/02/19(日) 01:46:37本当の名前は、たしか「マスターマインド」だったとおもふ
0167165
2006/02/19(日) 01:48:19すんまそん。
0168ζ゚
2006/02/19(日) 01:54:05unko借りますた */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define KETA 4
void Mondai(char * code)
{
char no[11]={"1234567890\0"};
int l=9,i,s;
for(i=0;i<KETA;i++){
s=rand()%l;
code[i]=no[s];
if(i)l--;
no[s]=no[l];
no[l]='\0';
}
no[i]='\0';
}
0169デフォルトの名無しさん
2006/02/19(日) 01:55:50{
int i, j, hit, blow;
hit = blow = 0;
for(i = 0; i < KETA; i++)
if(code[i] == user_code[i]) hit++;
else
for(j = 0; j < KETA; j++)
if(code[i] == user_code[j]) blow++;
printf("%dHit %dBlow\n", hit, blow);
return hit;
}
0170ζ゚
2006/02/19(日) 01:57:23{
char ucode[KETA+1]={'\0'};
int ans=0,s;
while(1){
++ans;
printf("\nコードを入力しやがれ。\n>");
scanf("%d",&s);
sprintf(ucode,"%d",s);
if(Unko(qcode, ucode)==4)break;
}
printf("code:%s\nuser_code:%s\n", qcode, ucode);
printf("%d回もかかってんじゃねえよプゲラ\n\n", ans);
}
0171ζ゚
2006/02/19(日) 01:58:22{
char question[KETA+1]={'\0'};
srand((unsigned)time(NULL));
Mondai(question);/*問題作成*/
Kaitou(question);/*回答*/
return 0;
}
0172ζ゚
2006/02/19(日) 02:01:26どないでっしゃろ?
判定部分、相当「仕様」に甘えているが。
「1111」とか入力しても1Hit3Blowにならないけど、いいのかな?
0173デフォルトの名無しさん
2006/02/19(日) 02:02:49> char no[11]={"1234567890\0"};
不必要ななる文字が追加されている。人間が数を数えるのもナンセンス。
char no[] = "1234567890";
で充分。
> if(Unko(qcode, ucode)==4)break;
折角KETAマクロが在るのだから使おう。
> sprintf(ucode,"%d",s);
数値の制限してないから、5桁入力されるとucodeが溢れる。
0174ζ゚
2006/02/19(日) 02:14:50なるほろおっしゃるとおり。
>sprintf()のところは、溢れたらif(s>9999){...}とか覚悟してたけど
不思議と落ちなかったもんで。
0176ζ゚
2006/02/19(日) 12:05:20ハ_ハ
ハ_ハ (^( ゚∀゚)^) にちようび〜〜
('(゚∀゚∩ ) /
ヽ 〈 (_ノ_ノ
ヽヽ_)
てんさよんあげていくよ〜〜〜
>>168-171
qcode[],ucode[]無理して関数で渡さなくても
グローバルで書いてもいいと思うんだがどうか。
渡す側と渡される側で変数名が同じ(>>165)なのはなんとなくイヤだし、
かといって関数ごとにcode[],qcode[],question[]と
同じものなのにいろいろ名前がつくのがカコイイとは思えない。
0177デフォルトの名無しさん
2006/02/19(日) 12:40:26同じ物に同じ名前がつくのを嫌がるとは……
0178デフォルトの名無しさん
2006/02/19(日) 13:36:11基本的に、グローバルに置くのは最終手段と思ったほうがいい。
仮にそのプログラムをもっと発展させようと思ったとき、
そのグローバル変数が足枷になるかもしれない。
まぁ、「使い捨てだから構わない」という方針なら別だが。
#あるプログラムのマルチスレッド化を試みているのだが、グローバル変数に泣かされているのは仕事なので内緒。
0179デフォルトの名無しさん
2006/02/19(日) 13:40:56言い換えるなら十分規模が小さいなら構わないということだな。
特にソースファイルがひとつで収まるようなコードでは
グローバルだ何だと大騒ぎしても全く無意味。
0180デフォルトの名無しさん
2006/02/19(日) 13:53:270181ζ゚
2006/02/19(日) 13:57:02,o/ ∠先生!呼び出し側と受け側の変数名が同じでも
lミiニ! それは違うものだと思います!
01821でs
2006/02/19(日) 14:13:53そこでわからなくなってしまったので質問です。
やさっしいCという本を手本にさせてもらっているのですが
0183ζ゚
2006/02/19(日) 14:17:250184配列のソート
2006/02/19(日) 14:23:27#define NUM 5
int main(void){
int test=[NUM];
int tmp;
int i, j, s, t;
printf(""%d人の点数を入力してください\n",NUM);
for( i=0; i<NUM; i++){
scanf("%d",&test[i]);
}
0185配列のソート
2006/02/19(日) 14:24:10for(t=s+1; t<NUM; t++){
if(test[t]>test[s]){
tmp=test[t];
test[t]=test[s];
test[s]=tmp;
} } }
for(j=0; j<NUM; j++){
printf("%d番目の人数は%dです\n",j+1,test[j]);
}
return 0;
}
これがまったく訳わかりませんたすけてください!!
0186デフォルトの名無しさん
2006/02/19(日) 14:29:51という行を
>for(t=s+1; t<NUM; t++){
の下の行に追加して出力をよく読んでみろ。
0187デフォルトの名無しさん
2006/02/19(日) 15:19:100188デフォルトの名無しさん
2006/02/19(日) 15:42:39詳しく解説してください
0189デフォルトの名無しさん
2006/02/19(日) 15:45:030190デフォルトの名無しさん
2006/02/19(日) 15:51:51ぜんぜんわかんあい
0191デフォルトの名無しさん
2006/02/19(日) 16:19:57何が分からないのか言え。
0192デフォルトの名無しさん
2006/02/19(日) 17:14:370193177
2006/02/19(日) 17:32:33そこまで言われると、勝手にしてくれとしか言えんが。
main()でMondai()関数に渡しているのは「問題」。
Mondai()関数で生成しているのは「問題」。
Kaitou()関数に渡しているのも「問題」。
それらに同じ名前をつけて何か問題でもあるのか?
0194ζ゚
2006/02/19(日) 21:42:59たとえば「問題」が二つ以上欲しくなったとき
void Mondai(char * qcode){,,,,,}
:
int main(void){
Mondai(qcode);
Mondai(qcode2);
:
ここのmain側qcode[]、qcode2[]と関数側qcode[]では3者全部意味が違うよね?
ただ値渡しという関連だけで。
他の場所で使う変数が同じ名前だと混乱するので、なるべく避けたいというのがζ゚ の考え。
ま、例外としてループに使うint i,j とかはどこの関数でも値渡しせず関数内宣言するけど。
いい燃料になると思ったんだけど、ただの宗教問題になってしまってツマラナス
0195デフォルトの名無しさん
2006/02/19(日) 21:57:18自己矛盾に陥ってる。
グローバルで充分と言いつつ(>176)、同じじゃなくなると言っている(>194)。
同じ名前がいやだと言うところからスタートしていると思ったのだが。
0196ζ゚
2006/02/19(日) 22:05:21>同じものなのにいろいろ名前がつくのがカコイイとは思えない。
>>176のレスの時点で、ζ゚ は別の関数(別のスコープ)では>>177>同じ物 とは思ってないわけだ。
だから
Mondai(*code) ←KETA数の数字列を返す関数
Kaitou(*qcode) ←生成した問題列を渡す
メイン側の呼び出し ←生成された実際の値そのもの
という感じで、汎用的→局所的 に名前を変えてみた。って感じ。
まずはどんなに汚くても反則技を使っても「問題なく動けば勝ち」と思ってるζ゚ なんで、
>>130の指摘を受けて、もっとプログラムが汚くなるなら薮蛇かなと。
それで新たな問題が出てくる(>>163指摘)ようならダメでしょい
0197ζ゚
2006/02/19(日) 22:10:27矛盾してるのは承知の上。
今回、問題生成が1回で済むのは仕様上明らかだし、
そんなものを「グローバル変数を嫌う」という理由だけで
関数内宣言→値渡し にこだわりすぎるのはどうかなと思っただけ。
別の関数内で同じ名前をつかうことに関しては>>196
0198ζ゚
2006/02/19(日) 22:15:02自己矛盾?
仕様上、qcode[]がひとつでいいという前提ならグローバル宣言を使うし
Mondai()の呼び出しが2箇所以上になることが設計時点で予想できるなら値渡しにするし。
0199デフォルトの名無しさん
2006/02/20(月) 02:35:31苦Cって何か良いな!初めて見た!
やべぇ続きが読みたくておちんちんがウズウズしてるけど
痔が悪化するから今日は寝るぞ!
0200デフォルトの名無しさん
2006/02/20(月) 11:10:47>設計時点で予想できる
設計時点でその可能性が無くても後々困らないようにしておくほうが吉
0201デフォルトの名無しさん
2006/02/20(月) 12:30:18#include <stdio.h>
int main()
{
fclose(stdin);
fclose(stdout);
return 0;
}
0202デフォルトの名無しさん
2006/02/20(月) 16:30:250203デフォルトの名無しさん
2006/02/24(金) 12:19:43今は仕事でVB.NETやってるんだけど将来は(独学で)VC++に乗り換えたいと思ってるんだけど、
何から学べば良いのか分からない。
やっぱりC→C++→VC++って勉強するのがベスト?
0204デフォルトの名無しさん
2006/02/24(金) 12:41:40最初からVC++がいいと思う。
0205デフォルトの名無しさん
2006/02/24(金) 12:55:41Win32API&VC++固有のライブラリ(MFCとか)覚えていくのがいいんじゃないの。
0206デフォルトの名無しさん
2006/02/24(金) 20:13:170207203
2006/03/01(水) 18:36:16仕事でVB.net使えってことなので・・・
ホントはVC++使いたかったんだよ。
>>205
基本はHelloWorldってことですな。
とりあえず猫でも分かる〜でなんとなくの雰囲気つかみながら
詳説C++読んで勉強するよ。
0208デフォルトの名無しさん
2006/03/03(金) 04:56:370209デフォルトの名無しさん
2006/03/03(金) 05:12:56MSのVC++はC++の開発環境を含む
Windowsj上でのC/C++アプリの開発環境
0210デフォルトの名無しさん
2006/03/03(金) 07:42:440211デフォルトの名無しさん
2006/03/03(金) 07:47:500212デフォルトの名無しさん
2006/03/03(金) 12:36:02C++/CLIって言語だと思ってほぼ間違いない。
つまり、C++でもなければC#でもない。
0213デフォルトの名無しさん
2006/03/03(金) 15:13:13もうC++/CLIはECMAで標準化されている。もちろん中身はISO C++を引用してあれこれと言う構成になっているけど。
http://www.stdblue.net/cgi-bin/vene/wiki/wiki.cgi?page=C%2B%2B%2FCLI
http://msdn2.microsoft.com/ja-jp/library/ms235629.aspx
> Visual C++ は次の標準に準拠しています。
> ISO C 95
> ISO C++ 98
> Ecma C++/CLI 05
0215デフォルトの名無しさん
2006/03/20(月) 13:51:20int main (void)
{
printf("hell of world\n");
return 0;
}
0216デフォルトの名無しさん
2006/03/27(月) 12:37:22int main (void) はいかん。int main() だ。
0217デフォルトの名無しさん
2006/03/27(月) 12:44:08規格で明示的に定められているmain関数のプロトタイプは
(1) int main(void)
(2) int main(int argc,char**argv)
(3) 上二つと等価な方法
(4) それ以外の処理系定義の方法
なのでint main()は処理系定義となって、可搬性に劣るからお勧めできない。
0218デフォルトの名無しさん
2006/03/28(火) 13:43:09ところがどっこい、関数の定義で空の括弧は関数が引数を持たないことを表すと書いてあって、
関数の定義では空の括弧と(void)の違いが無いように読めるんだ。
つまりint main()でmain関数を定義した場合、それは(3)になると俺は思っている。
尤も俺はint main(void)を使っているけれど。
0219デフォルトの名無しさん
2006/03/29(水) 10:34:460220デフォルトの名無しさん
2006/03/29(水) 10:39:16extern foo();
foo(1);
とでもやってコンパイルしてみればわかるだろう。
0221ζ゜
2006/04/12(水) 22:50:020222ζ゜
2006/04/16(日) 23:05:050223デフォルトの名無しさん
2006/05/09(火) 21:04:570224今更
2006/05/09(火) 22:03:48WindowsのVisual C#とかVisual Basicってフリーのやつで勉強始めてもいいのでしょうか?
0225デフォルトの名無しさん
2006/05/09(火) 22:31:32visual studio.net
絶対に買い。
0226デフォルトの名無しさん
2006/05/10(水) 11:25:19何の勉強するかによるが、言語や環境の使い方やプログラムの組み方と言う話なら無料の奴で良い
0227デフォルトの名無しさん
2006/05/14(日) 03:46:43一応使える言語はJavaです。
環境は、VC2005EEです。
OSはWindowsXPSP2です。
0228デフォルトの名無しさん
2006/05/15(月) 19:41:43さあ? とりあえず読んでみたら?
本屋で立ち読みするか図書館行くかして。
0229デフォルトの名無しさん
2006/05/15(月) 20:48:090230デフォルトの名無しさん
2006/05/21(日) 12:43:22printf("%s", str);
}
っていうのが本に載ってたんですが条件の意味が分かりません。
やさしく教えていただけないでしょうか?
0231デフォルトの名無しさん
2006/05/21(日) 12:45:33while (fgets(str, 7, fp) != NULL) {
printf("%s", str);
}
と等価。
0232デフォルトの名無しさん
2006/05/21(日) 15:19:26ありがとうございます。
それなら意味が分かります。
でも、同じ本でも同じように省略してたり、「!=NULL」が表示してたりで分かりにくかったんです('A`)
ご親切に ども。
0235デフォルトの名無しさん
2006/05/22(月) 10:53:26等価って説明は書いてなかった?初心者用参考書だと書いてそうなもんだけど
> でも、同じ本でも同じように省略してたり、「!=NULL」が表示してたりで
これはよくないな
0236232
2006/05/22(月) 17:58:22「!=NULL」の説明はありましたが省略されてる構文はそういうことに触れてなかったと思います。
近くに聞けるような人間もいないので質問させてもらった次第です。
他のスレッドは敷居が高いような気がしてここで質問させてもらいました。
ブール型で省略したらtrueだっていうのはなんとなく分かるんですけどね…orz
0237デフォルトの名無しさん
2006/05/23(火) 14:52:17ポインタについて質問です。
int x = 100;
int* p = 100;
printd("%d\n", *p);
でも、100が表示されるのはわかるんですが、
char* s = "hello";
printf("%s\n", *s);
とすると、アドレス?が表示されます。
printf("%s\n", s);
とすると、helloが表示されます。
なぜなんでしょうか?
0238デフォルトの名無しさん
2006/05/23(火) 14:56:20%sには、文字列の先頭アドレスを指定しなければならないから
0239デフォルトの名無しさん
2006/05/23(火) 15:04:25ポインタ理解できなくてやめたやつって、何人いるんだろうな?
0240デフォルトの名無しさん
2006/05/23(火) 16:06:47ありがとうございます。
0241デフォルトの名無しさん
2006/05/23(火) 16:12:46int a[] = {0,1,2,3,4,5,6,7,8,9}
int *p = a;
int i;
/* 1 */
for (i = 0; i < 10; i++) [
printf("%d\n", *p++);
}
/* 2 */
for (i = 0; i < 10; i++) {
printf("%d\n", *p);
p++;
}
1と2って、同じ意味になるの?
0242デフォルトの名無しさん
2006/05/23(火) 16:18:180243デフォルトの名無しさん
2006/05/23(火) 16:22:23微妙に違うがそう書くなら結果は同じ、という感じ。
0244241
2006/05/23(火) 16:33:23レスありがとうございます。
違うというのは、どう違うのでしょうか?
教えていただけるとうれしいのですが。
もしくは参照URLか書籍があれば紹介をお願い致します。
0245デフォルトの名無しさん
2006/05/23(火) 16:43:591ではp++が実行される場所が不定。
printfのコール前に実行されるかもしれないし、
printfが終わった後に実行されるかもしれない。
0246デフォルトの名無しさん
2006/05/23(火) 16:58:36レスありがとうございます。
不定ということは、使用しないで
明示的にp++をしたほうがいいということですか?
0247デフォルトの名無しさん
2006/05/23(火) 17:03:36不定だからこそ、順序に依存するコードを書いてしまってはダメ、というだけの話。
今回の場合はどこで実行されても問題ない。
0248デフォルトの名無しさん
2006/05/23(火) 17:04:280249デフォルトの名無しさん
2006/05/23(火) 17:07:19p++の前にテンポラリに待避させるコードが生成される。
感じとしては、1は
int tmp = *p;
p++;
printf("%d", tmp);
なコードが生成される。
その分、1の方が多少遅くなるけれど、普通は最適化で除去され、printfの後に実行されるようになって
printf("%d", *p);
p++;
みたく、2と同じコードになる。
最適化の有無を切り替えて逆汗を見比べると分かりやすいかと。
0250デフォルトの名無しさん
2006/05/23(火) 21:33:03とりあえずお前は帰れ>>245
0251デフォルトの名無しさん
2006/05/24(水) 12:42:430252デフォルトの名無しさん
2006/05/24(水) 13:08:53知らない者は教える。
0253241
2006/05/24(水) 20:29:53レスが遅くなってしまい、申し訳ございません。
>>249さんのレスが大変参考になりました。
ありがとうございました。
0254デフォルトの名無しさん
2006/05/26(金) 02:04:10FILE* fp;
fp = fopen("hoge.txt", "rb");
と
fp = fopen("hoge.txt", "r");
バイナリで読み込んだときとそうでないときは、何か違うんですか?
0255デフォルトの名無しさん
2006/05/26(金) 02:21:28改行コードの扱いが変わる。
Windowsの場合、前者は普通にそのまま読み込むが、
後者は\r\nのペアを勝手に\nに変換するようになる。
0256デフォルトの名無しさん
2006/05/26(金) 11:11:29UNIX系OSでは違いはありません。
その他のOSでは"r"の時に改行を意味するコードが '\n' に置き換えられます。
0257デフォルトの名無しさん
2006/05/26(金) 17:20:20と
int main(void)
は同じなんですか?
0258デフォルトの名無しさん
2006/05/26(金) 18:44:51と
int main(int argc, char* argv[])
ってどーしてスペースの位置が違うの?
0259デフォルトの名無しさん
2006/05/26(金) 22:34:54好みの問題
0260デフォルトの名無しさん
2006/05/26(金) 22:59:07と
#include "stdio.h"
は何が違うのでしょうか?
0261デフォルトの名無しさん
2006/05/26(金) 23:08:59検索パスが違う。
前者はユーザが指定したかコンパイラが知っているパスからのみ検索する。
後者は先ずカレントディレクトリを検索した後、前者と同じパスを検索する。
>>257
前者は省略しすぎているだけで、ほぼ同じ意味になる。
>>256
Unix系でないOSでも、rbの指定のないOSはいくらでもある。
0264デフォルトの名無しさん
2006/05/26(金) 23:20:27別に構わないが、プログラム全体でそのスタイルを統一するのを忘れずに
0265260
2006/05/26(金) 23:22:08ちなみに、知っていれば教えていただきたいのですが
#include <stdio.h> と #include "stdio.h" のインクルードの違いって
名前があったりしますか
0267デフォルトの名無しさん
2006/05/26(金) 23:29:12ない
0269デフォルトの名無しさん
2006/05/27(土) 19:01:03うそ教えるなよ
0270258
2006/05/29(月) 13:04:11正しいのですか?
0271デフォルトの名無しさん
2006/05/29(月) 13:37:00正しさと言う観点で見れば、どちらも正しい。
まぁ後者の方が冗長なわけで、前者のスタイルのほうが圧倒的によく見かけるが。
0272デフォルトの名無しさん
2006/05/29(月) 15:05:39昔は後者だけが正しかった。
今はどちらでもコンパイルは通るが、前者の書き方が良いとされている。
0273258
2006/05/29(月) 16:03:59冗長?ってなんじゃろう?
ご丁寧に回答ありがとうございます。
いろいろ書き方があると迷いますね('A`)
return 0;で統一することにします。
0274デフォルトの名無しさん
2006/05/29(月) 22:30:140275デフォルトの名無しさん
2006/05/29(月) 23:03:58コード
0276デフォルトの名無しさん
2006/05/29(月) 23:27:45本とか紹介してやったら?
0277デフォルトの名無しさん
2006/05/30(火) 06:29:43でももう一度見てみようかな
0278デフォルトの名無しさん
2006/05/30(火) 06:42:20#include <stdio.h>
int main(void)
{
int flug, age;
printf("フラグ[1 or 0] >>");
scanf("%d",flug);
printf("女の子の年齢>>");
scanf("%d",&age);
if(flug == 1 && age <= 16)
printf("それなんてエロゲ?\n");
else if(flug == 1)
printf("一生独身\n");
else
printf("童貞乙\n");
return 0;
}
0279デフォルトの名無しさん
2006/05/30(火) 06:44:210280デフォルトの名無しさん
2006/05/30(火) 07:32:36ググったら分かりますよ
0281デフォルトの名無しさん
2006/05/30(火) 09:29:080282デフォルトの名無しさん
2006/05/30(火) 09:43:40には何と答えればいいんですか?
0283デフォルトの名無しさん
2006/05/31(水) 00:47:55俺は何を学べばよかったんだ?
0284デフォルトの名無しさん
2006/05/31(水) 05:22:52向上心
0285デフォルトの名無しさん
2006/06/01(木) 20:58:54処理…
}
のように初期化を省略するとどーなるんですか?
0286デフォルトの名無しさん
2006/06/01(木) 21:03:37初期化が省略されます
0287デフォルトの名無しさん
2006/06/01(木) 21:09:33といことは
初期化はしなくてもいいわけですね。
0288デフォルトの名無しさん
2006/06/01(木) 21:12:410289デフォルトの名無しさん
2006/06/02(金) 10:12:59初期化しなくてもいいと思えば、初期化しなくていいし
初期化しなきゃならないなら、初期化すればいいんじゃね?
0291デフォルトの名無しさん
2006/06/03(土) 09:58:29コンパイル時にエラーにされると思う
0292デフォルトの名無しさん
2006/06/03(土) 13:10:00「'scanf'が古い形式として宣言されました」
と警告がでます。
どーすれば直るでしょうか(´д`)
0293デフォルトの名無しさん
2006/06/03(土) 13:27:29Visual C++ 2005ならこれ。
http://pc8.2ch.net/test/read.cgi/tech/1146700389/230
0294デフォルトの名無しさん
2006/06/03(土) 16:18:35あら、こんな所にも入門者さんが
正直「〜が古い形式として宣言された」って文句は
無視しても問題ないっす。
それように新たな関数を装備してるのでそっちを使ってちょ
なんて出てきても、そんなMSだけで標準なCのAPIなんて
使ってたら、基本が身に付かなくなっちゃうよ。
0295デフォルトの名無しさん
2006/06/03(土) 17:11:39レス有難うございます。
なんかscanf_sにしたら警告は出なくなったんですが
これって一般的じゃないんですね。
Visual C++をCコンパイラに使うのはマズイのかな…(´д`)
0296デフォルトの名無しさん
2006/06/03(土) 17:17:230297デフォルトの名無しさん
2006/06/03(土) 17:28:20確かに問題は大あり。
せめてfgets()とsscanf()使うのが前提だけど
それでもバッファーオーバーランがある。
ただ、入門者が独自仕様の関数を覚えてしまうと
ANSI準拠の関数を覚えるには支障があると思う。
というか、ごっちゃごちゃになっちまうと思う。
ま、windows用のアプリ作るなら、また別で
それはそれで、win32API群を参照の事
0298デフォルトの名無しさん
NGNG0299デフォルトの名無しさん
2006/06/03(土) 18:39:13入るのかな
もし入るなら、また覚えること増える
ま、安全な関数を立案し規格かすることは良いことだと思う
けどぉ・・・・
また覚え直しか!?
C99からC100になるのかな
もう勘弁してくれ〜・・・
ただ、C言語をこれからはじめるなら、今の規格に準拠した物を使った方が
いいよGCCとかではサポートされてないわけだし
組み込みとか、だと、C99どころか、まともに動くコンパイラかどうかもわからないし
MSのコンパイラのみで適用されている関数だから
どっぷりVS2005に対して言語を勉強するなら止めはしないさ
0300デフォルトの名無しさん
2006/06/03(土) 19:26:37このまま行けば承認されそうだね。
C99の奇天烈シンタクスのサポートよりはよっぽど労力が少ないだろうし。
# 日本の標準化委員会は反対表明をしてた気がするが…
0301デフォルトの名無しさん
2006/06/04(日) 01:41:030302デフォルトの名無しさん
NGNG0303デフォルトの名無しさん
2006/06/04(日) 15:17:38なぜなんだ・・・
0304デフォルトの名無しさん
2006/06/04(日) 16:50:49別に不思議なことではない。
0305デフォルトの名無しさん
2006/06/05(月) 00:25:59使い道がまったくわからないんです。
教えてください。
0306デフォルトの名無しさん
2006/06/05(月) 12:21:49scanf("%lf", a);
printf("%f", a);
というのがあるとして
どうしてscanfは%lfなのにprintfでは%fなんですか?
0307306
2006/06/05(月) 12:23:09でしたm(_ _)m
0308デフォルトの名無しさん
2006/06/05(月) 12:34:04そういう風に決まっているから。
もうちょっと詳しく言うと、可変長引数では、float型は自動的にdouble型に変換(格上げ)される。
つまり、printfにfloatを渡そうがdoubleを渡そうが、printfにはdouble型にしか見えないことになる。
(float型が渡されることはあり得ない)
floatとdoubleを区別する必要がないので、%fに統一されている。
floatはdoubleに格上げされるけれど、float*はdouble*には格上げされない(別の型として扱われる)ので、
ポインタを引数に取るscanfでは区別する必要がある。
そこで、%lfと%fで使い分けている。
簡単に言えばこんなところ。
0309デフォルトの名無しさん
2006/06/05(月) 12:41:03つーか、どうせ細かいところがいろいろ違うからprintf()系とscanf()系の指定子に互換性がないと思った方がいい。
#同じとする入門書が多いのも事実だが。
0310306
2006/06/05(月) 12:57:50詳しく説明していただいてありがとうございます。
scanfは「ポインタを引数に取る」というところで
別物だとなんとなく分かりました。
も少し勉強してみます。
0311デフォルトの名無しさん
2006/06/05(月) 17:36:38"±"でいいのでしょうか?
0312デフォルトの名無しさん
2006/06/05(月) 17:54:30Cでは±1のような2つの値を持つ定数を直接取り扱うことはできない
0313デフォルトの名無しさん
2006/06/05(月) 18:21:53D=pow(b,2)-4*a*c;
x=-b±sqrt(D)/2*a;
はどう修正すればいいのでしょうか?
0314デフォルトの名無しさん
2006/06/05(月) 18:26:02その結果をどう利用するのかにも拠るが、表示するだけでいいならこれでいい。
printf("x=%g, %g\n", -b+sqrt(D)/2*a, -b-sqrt(D)/2*a);
要は、自分が何をしたいのか理解してから先に進めと。
0315デフォルトの名無しさん
2006/06/05(月) 18:59:32D<0,D=0,D>0のいずれに該当するのかを表示させ、その値も表示させるプログラムを作成したいんです。
#include <stdio.h>
#include <math.h>
int main(void)
{
double a, b, c, D, x;
a*pow(x,2)+b*x+c=0:
printf("二次方程式の解の場合分け");scanf("%d,%d,%d", &a,&b,&c);
D=pow(b,2)-4*a*c;
x=-b±sqrt(D)/2*a;
if(D>0)
printf("異なる2つの実数解を持つ\n");
else if(D=0)
printf("重解を持つ\n");
else if(D<0)
printf("異なる2つの虚数解を持つ\n");
return 0;
}
のように組んだのですが(まだ途中)プラスマイナスをどのようにすればいいのかがわかりません。
という質問をしたかったのです(u u)
0316デフォルトの名無しさん
2006/06/05(月) 19:04:29x1とx2に分けりゃいいだけの話じゃないか
0317デフォルトの名無しさん
2006/06/05(月) 19:15:33>314でいいじゃん。表示するだけなんだろ。
それから、2乗はpow()を使わないほうがいいぞ。単純に掛け算で済むんだからな。
0318デフォルトの名無しさん
2006/06/05(月) 19:21:02±が使えないことがわかっただけでも収穫ありです。
いろいろ試してみます
0319デフォルトの名無しさん
2006/06/07(水) 01:30:08char buf[] = "1234";
if (isdigit(buf[0]) {
printf("数字です。\n");
}
これ、「数字です。」が表示されるんですが、なぜなんでしょうか?
bufは文字の配列のつもりで扱っていたのですが、わけがわかりません。
教えてください。
よろしくお願い致します。
0321デフォルトの名無しさん
2006/06/07(水) 17:24:48buf[0]で、bufの最初の文字を意味する。
だからその場合、buf[0] == '1'となっている。
0322デフォルトの名無しさん
2006/06/07(水) 23:44:22ありがとうございます。
このまま使用しても問題は無いんですね。
しかし、なんとも不思議な気分です。
0323デフォルトの名無しさん
2006/06/08(木) 09:28:08あと,「数字」と「数値」の違いについて考えろ
0324デフォルトの名無しさん
2006/06/14(水) 02:43:11int n=0;
while(isdigit(*s)){
n=n*10+*s++-'0';
}
return n;
}
void main(){
printf("123=%d\n",s2i("123"));
}
0325デフォルトの名無しさん
2006/06/25(日) 01:58:51Perlを使ってのCGIなら組むことが出来ます。
C言語のソースってPerlによく似ていますよね?
ifとか・・・。
面白そうなのでC言語を始めてみようと思うのですが
何から始めたらいいのでしょうか?
0326デフォルトの名無しさん
2006/06/25(日) 04:29:53ifなんて大体の言語に共通するものだ
JavaもCもPerlもPHPもrubyもpascalもその他諸々もそうだ
Perlの延長という気分で始めるなら止めた方がいい
ポインタやらなんやら分からんことあるだろうがまず何より変数の型で痛い目見るぞ
まじでC言語勉強してやろうって言うのならとりあえず変数の型を勉強するべき
0327デフォルトの名無しさん
2006/06/25(日) 11:15:520328デフォルトの名無しさん
2006/06/25(日) 11:28:340329デフォルトの名無しさん
2006/06/25(日) 13:45:46アセンブラの代替を目指したと言う歴史的経緯、低水準に近いと言うことの表れ。
ちなみにC++にはstd::stringと言うものがあるよ。
0330デフォルトの名無しさん
2006/06/25(日) 17:03:08他の言語にはstrung型ってのがあるの?
「張り詰め型」とでも訳すのかなぁ…
0331327
2006/06/25(日) 19:42:340333デフォルトの名無しさん
2006/06/27(火) 17:39:32char str[10];
scanf("%s", str);
として入力された文字列が"abc"
なら処理をするという風にしたいです。
str="abc"という条件ではうまくいきません。
VBとはまるで違いますね…orz
0334デフォルトの名無しさん
2006/06/27(火) 18:10:56#include <stdio.h>
#include <string.h>
int main()
{
char str[10];
scanf("%9s", str);
if (strcmp(str, "abc") == 0) {
...;
}
return 0;
}
0335デフォルトの名無しさん
2006/06/27(火) 18:45:51ありがとうございます。できました(・∀・)
変数と文字列は等式ではつなげないのですね。
ちなみにstrcmpは何と読むのですか?
0336デフォルトの名無しさん
2006/06/27(火) 20:16:150337デフォルトの名無しさん
2006/06/27(火) 20:40:23俺はストラコンプと読んでいる。
0338デフォルトの名無しさん
2006/06/27(火) 21:12:34レスありがとうございますm( _ _ )m
0339デフォルトの名無しさん
2006/06/28(水) 19:34:56printfとかscanfとかが使えて、コンパイルも出来るし、
exeもちゃんと動くんですが何故でしょう?
0340デフォルトの名無しさん
2006/06/28(水) 23:12:38Cとはそういうもの。
ただし、適切なヘッダをincludeしないと、コンパイル時にエラーチェックがなされないので、
きちんと適切なヘッダをインクルードすべき。
たとえば次のコードは#include <stdio.h>が無いとコンパイルできてしまう。(おそらく実行時に落ちる)
int main(void)
{
printf(7, "%d\n");
}
0341339
2006/06/29(木) 19:45:39回答有難うございます。
そうなんですか!?
#include <stdio.h>を忘れてたのにコンパイルできてしまったので
不思議な気がしてました。
普通、実行できなければコンパイル時にエラーになると思いますよね。
0342デフォルトの名無しさん
2006/06/29(木) 20:28:560343デフォルトの名無しさん
2006/06/29(木) 21:27:581. 自力でdoubleを文字列にする関数を書く。
2. Cを使わない。
0344デフォルトの名無しさん
2006/06/30(金) 02:57:15それを文字に直して上手くくっ付けるというプロセスを踏めばできるだろうけど
何でそんなことしたいんだ?
0345デフォルトの名無しさん
2006/06/30(金) 02:59:14別に整数部と小数部に分ける必要はないな
0.1, 0.01,...で割れば良いだけの話だった
0346デフォルトの名無しさん
2006/06/30(金) 17:43:380347デフォルトの名無しさん
2006/06/30(金) 21:58:15どこを見てもdouble⇒文字列変換の部分が見当たらなかった。
0348デフォルトの名無しさん
2006/06/30(金) 22:29:42VC++での文字列変換はランタイム関数_cfltcvtに依存してるので、
crtのソースの中には該当箇所がないよ。
output.cを参照。
0349デフォルトの名無しさん
2006/06/30(金) 23:09:210350デフォルトの名無しさん
2006/07/18(火) 21:29:03………
int i;
while (*ss) {
………
}
これってwhileの条件の意味は
「*ssが'\0'でない間ループする」って本に書いてあるですけど
なんでそうなるの分からないぽ。
馬鹿にでも分かるように説明してほしいぽ。
0351デフォルトの名無しさん
2006/07/18(火) 23:26:58}
と書いたとき、xが真ならばループは継続する。
つまり、xと書いてもx != 0と書いても同じことだ。
>350の例ならば、while (*ss != 0)と同じと言うことだし、
積極的に文字であることを明示したwhile (*ss != '\0')とも同じだな。
まぁ、意味がはっきりするように最後の形で書くことをお勧めするが。
0352デフォルトの名無しさん
2006/07/18(火) 23:36:160353デフォルトの名無しさん
2006/07/19(水) 00:58:16う〜ん、なんとなくわかったぽ。
ありが�d
while (*ss != 0)という書き方なら分かります。
ただ…
「xが真ならば」って真ってどーゆーことなのか教えてほしいぽ。
0でなければ真?でおkなのでつか?
0354デフォルトの名無しさん
2006/07/19(水) 01:13:00他人に聞いている態度って物を弁えろよな。
0355デフォルトの名無しさん
2006/07/19(水) 15:04:100356350
2006/07/19(水) 19:56:10もうちょっと勉強してきます。
レスありがとうございました。
0357デフォルトの名無しさん
2006/08/12(土) 22:04:590358デフォルトの名無しさん
2006/08/12(土) 22:14:270359デフォルトの名無しさん
2006/08/12(土) 22:23:07なんでもかんでも「return 0;」をつけていたのですが
「Cの絵本」を読んでたらついてないじゃありませんか!!
といわけで…
どういう場合に要るのですか?
0360デフォルトの名無しさん
2006/08/12(土) 22:27:37int、もしくはintから暗黙的に変換することが可能な型を戻り値の型に持つ関数の中で、
return 0;を書いた場所で関数の実行を終了させ、その関数の結果の戻り値を0にしたい場合に要る。
0361359
2006/08/12(土) 22:34:11例えば、戻り値のない関数では要らないと。
では、main関数はどうなのでしょうか。「return 0;」なくてもおkなんですか?
0362デフォルトの名無しさん
2006/08/12(土) 22:34:24ただし無くても一見正常に動くので、入門書などではmain関数などでreturnを省略することがある。
0363デフォルトの名無しさん
2006/08/12(土) 22:39:05C89ではmain関数の戻り値が不定になるため書いたほうが良い。
C99ではC++と同じくmain関数の最後に暗黙的にreturn 0があるのと同じなので必要ない。
ただ、C89との互換性も考慮すると、
main関数の最後にreturn 0;を省略せずに書いていたほうが堅実な書き方ではある。
0366デフォルトの名無しさん
2006/08/12(土) 22:51:24別にc89でも省略して問題ないよ。
不定で問題あるときだけ書けばいい。
0368デフォルトの名無しさん
2006/08/12(土) 23:05:21void main()は処理系定義の方法に該当して、ポータビリティがない。
なのでCとしては
int main(void)もしくはint main(int,char**)などと等価な定義にするほうが移植性が高い。
0369366
2006/08/12(土) 23:07:550370デフォルトの名無しさん
2006/08/24(木) 22:34:31窓アプリだとmainじゃなくてWinMainだし、入口は簡素化しといて、処理系に応じて書き直す位でいいんじゃない?
0371デフォルトの名無しさん
2006/08/26(土) 00:03:300372デフォルトの名無しさん
2006/08/26(土) 00:39:030373デフォルトの名無しさん
2006/08/26(土) 00:50:260374デフォルトの名無しさん
2006/08/30(水) 17:08:22自分としてはC++かJAVAを習得しようと考えているんですが、
なかなか壁が高そうなので、その前に足がかりとして
C言語を勉強してみようと思いました。
理由は、何となくPerlからだとすんなり入れそうな気がした、ってだけです。
何か思い違いとか方向性を間違っているようでしたら指摘お願いします。
0375374
2006/08/30(水) 17:13:020376デフォルトの名無しさん
2006/08/30(水) 22:35:13JavaでもC++でもやればいいんじゃない?
0377374
2006/08/31(木) 18:41:10ありがとうございます。
いきなりJavaとかC++とかに手を出して挫折を繰り返すよりも
Cをある程度勉強してからの方が結果的に理解が早い、
(巷の多くの書籍がC習得済みを前提に書かれてたりするので)
というようなケースが多いのなら先にCを勉強しようかなと迷っていたところです。
一筋縄ではいかないとは思いますが興味のある言語をやろうと思います。
ありがとうございました。
0378デフォルトの名無しさん
2006/09/04(月) 17:49:58一度は高級アセンブラであるCに触れておくべき。
0379デフォルトの名無しさん
2006/09/05(火) 09:39:53最初からC++でいいんじゃない?
0380デフォルトの名無しさん
2006/09/05(火) 21:32:36古典を勉強するもんだお
クイックソートなんていらんじゃろ、クイックソートって年々進化してエロイことなってるし
あんなの毎回関数書かれたらバグだらけだ
0381デフォルトの名無しさん
2006/09/12(火) 21:47:09>>380
確かに、ソートする配列の要素数が少ない時はクイックソートは不便。
0382デフォルトの名無しさん
2006/09/13(水) 23:34:23何故不便?
qsort()関数を使うのが面倒だとか、遅いとかいうなら判るのだが。
#そしてそれらはソートアルゴリズムの所為じゃない。
0383デフォルトの名無しさん
2006/09/14(木) 15:52:50『不便』と云う言葉が悪かった。
『遅い』と言いたかったのだが。すまん。
0384デフォルトの名無しさん
2006/10/25(水) 22:13:50「文字列を渡すと逆順にして返す関数reverse()」の部分を一行ずつ
解説してもらえませんか?理解できません(@_@)
#include <stdio.h>
#include <string.h>/* for strlen */
void reverse(char *ss);
int main(void) {
char str[] = "program12345";
reverse(str);
printf("str=%s\n", str);
return 0;
}
void reverse(char *ss) {
int wk, pos1 = 0, pos2;
pos2 = strlen(ss) -1;
while (pos1 < pos2) {
wk = *(ss+pos1);
*(ss+pos1) = *(ss+pos2);
*(ss+pos2) = wk;
++pos1;
--pos2;
}
}
0385デフォルトの名無しさん
2006/10/26(木) 02:15:12pos2にはss(=&str[0])の指す文字列の長さ(=12)-1が代入されるから*(ss+pos2)=str[11]='5'
先にテンポラリとしてwkに*(ss+pos1)=*(ss+0)=str[0]の値を代入しておいてから
ss+pos1(=str[0])にss+pos2(=str[11])の値を入れて、str[11]にwkを代入すれば交換完了
後は++pos1,--pos2で外側から内側に向かいながら交換し続けて
pos1とpos2の値がぶつかるかすれ違ったところでループ終了、文字列は逆順に。
なんでwkがintなのかは、文字定数(''で括った1個の文字)はcharではなくintだからでないでしょーか
0386359
2006/10/26(木) 21:01:27レス有難うございます。
そうやって解説していただくと、なんとなく分かったような気がします。
ちょっと霧が晴れました。
そんでwkってどーゆー役割をしてるんでしょう?なんかこれがあるためにややこしくなってるような…
0387384
2006/10/26(木) 21:03:11359→384です。
0388デフォルトの名無しさん
2006/10/26(木) 21:59:22この方が判りやすくね?
void reverse(char *ss)
{
int pos1, pos2;
for (pos1 = 0, pos2 = strlen(ss) - 1; pos1 < pos2; ++pos1, --pos2) {
int wk = ss[pos1];
ss[pos1] = ss[pos2];
ss[pos2] = wk;
}
}
0389デフォルトの名無しさん
2006/10/26(木) 22:01:44>そんでwkってどーゆー役割をしてるんでしょう?なんかこれがあるためにややこしくなってるような…
所謂スワップ(入れ換え)の定番ロジック。マクロにでもしておけば少しは読み易くなるかな。
0392デフォルトの名無しさん
2006/10/26(木) 22:53:28wkをint型にする必要はないだろ。
0394デフォルトの名無しさん
2007/01/02(火) 16:08:19ここでアルゴリズムを語るのもどうかと思うわけだが、クイックソートは既に大部分がソートされてるときには最悪の計算量になるんよ。
だからといってシェルソートが良いとは言わないが。大規模なソートはいくつかのブロックに分けてシェルソートしたのをマージソートで紡いでいくのが実用的だと思うよ。
0395デフォルトの名無しさん
2007/01/02(火) 20:15:54チャラって読んでたよ、2年くらいwwwww
0396デフォルトの名無しさん
2007/01/02(火) 23:41:260397デフォルトの名無しさん
2007/01/03(水) 08:58:170398デフォルトの名無しさん
2007/01/03(水) 13:46:29それが問題になる具体的な状況は?
アルゴリズムだけ語って現実を見てないんじゃない?
0399デフォルトの名無しさん
2007/01/03(水) 15:02:12昔の話だが、とある後援会名簿のシステムを組んだ時の話で参考になるかは微妙だけど。
確か640KBのメモリとDOSで20万人分位の規模。
もちろんHDDに280MB位のファイルを拵えてディスクソートするしか整列の方法が思いつかなくて。実際には各レコードを指すインデックスファイルを作ってインデックスの並べかえをやるんだけど、比較の際にディスクを読みにいくわけでとんでもないことになる。
そこで4096レコード単位でクイックソートしたのをマージで併合するようにした。
ところが、クイックソートはほとんど並べかえが終わってる状況だと計算量が最悪になる。しかも途中経過を定量的に表示するのが困難で「フリーズしてませんか?」とか言われるし。逆にシェルソートは既に大部分が整列済みだとすごく早い。
でもまあ、こんな状況でもない限りはクイックソートがベターな選択だと思うよ。
0400デフォルトの名無しさん
2007/01/03(水) 15:14:33でかいファイルでメモリが少ないといろいろ工夫するしなあ。
そういや、メモリマップドファイルでクイックソートなんてしちゃいけません、とか書いてあって
早速でかいファイルをメモリマップドファイルでクイックソート試したりしたなあw
0401デフォルトの名無しさん
2007/01/03(水) 18:01:49チャー?
じゃないの?
ちょっとだけよ
0402デフォルトの名無しさん
2007/01/03(水) 18:30:24入力の際、既にある程度整列されているものを入力すること(名簿とか)あるでしょ?それをソートする時クィックソート使うと、メモリ馬鹿食いで下手すりゃO(n)分再帰呼び出し。
改良されてない形のまんまのクィックソートは、整列済みのソートを扱うのは苦手で、バラツキが多いサンプルに対してのソートには強い。
三つくらいのデータ選んで、中央値を軸に据える改良されたクィックソートとかなら、話は別だけど。
0403デフォルトの名無しさん
2007/01/03(水) 18:53:13それって、
クイックソートが悪いんじゃなくて、
クイックソートの使い方が悪いだけだろ?
0404デフォルトの名無しさん
2007/01/03(水) 18:59:40結局のところ、不適当な用途に使って遅いって文句を言っているだけのような希ガス。
しかも、>381は「要素数が少ない」ときに「不便」だと言ってるから>382が聞いているのに
なにを頓珍漢なことを言う香具師ばかりなんだ?
0405402
2007/01/03(水) 20:17:24そだね。
ある程度整列された状況での問題になるケースの、具体的なケースを問われていたみたいだから、示しただけよ。
>>404
>>398は、>>394へのレスでしょ?少数のデータ云々からは、既に話は外れてる。
少数のデータなら、定数係数の大きさ考えて、挿入ソートの方が有利。
まぁ、これも部分配列が小さくなったら、挿入ソートを使うようにすれば問題は無い。
不便ってよりは、万能ではないから、ケースによって他のソートに委ねたり、弱い部分の補強をしないとならないねってことだと思うよ。
それはクィックソートに限った話じゃないけど。
ついでに、自分は380でも381でもない。
380のクィックソート不要論に乗っただけ。
0406デフォルトの名無しさん
2007/01/03(水) 20:45:09>ある程度整列された状況での問題になるケースの、具体的なケースを問われていたみたいだから、示しただけよ。
いや、そうじゃなくて・・・
「pivot をどう選ぶか」という問題は、
クイックソートとは切り離された問題だという話。
>メモリ馬鹿食いで下手すりゃO(n)分再帰呼び出し。
>改良されてない形のまんまのクィックソートは、整列済みのソートを扱うのは苦手
なのは、通常の場合、まず間違いなく pivot の選び方が拙いから。
0408デフォルトの名無しさん
2007/01/04(木) 17:00:44ほかの関数でも使うにはどうすればいいんですか?
0409デフォルトの名無しさん
2007/01/04(木) 17:16:20staticにして、変数のポインタを使いたい関数に渡す。
0410デフォルトの名無しさん
2007/01/04(木) 22:19:51>409の手法はアナクロであり、マルチスレッドプログラミングと相容れない手法でもあるのでお勧めできない。
適切に引き数などによる受け渡しを行なうべき。
0411デフォルトの名無しさん
2007/01/04(木) 22:36:43>>409 のご高説に従えば、
「グローバル変数は全て(アナクロなので)使用不可」となる。
「何が正しいか?」の判断は >>408 が行うこと。
0412デフォルトの名無しさん
2007/01/05(金) 00:03:38>>409?
ご高説?
仕様不可?
頭に蛆でも湧いているんですか?
0413デフォルトの名無しさん
2007/01/05(金) 09:01:180414デフォルトの名無しさん
2007/01/06(土) 01:40:390415デフォルトの名無しさん
2007/01/06(土) 05:20:130416デフォルトの名無しさん
2007/01/06(土) 17:00:040417デフォルトの名無しさん
2007/01/07(日) 07:49:33意味は時代遅れとかそんな感じ。
アナログとは無関係。
0418デフォルトの名無しさん
2007/01/10(水) 09:58:24そういう時ははつっこむかスルーで
0419デフォルトの名無しさん
2007/02/01(木) 22:19:30たとえばマウスのデバイスドライバをCで書くときにマウスポインタの位置を記録しておく変数とか。
0420デフォルトの名無しさん
2007/02/04(日) 00:23:490421デフォルトの名無しさん
2007/02/04(日) 00:41:26東方に感化されてC言語始めた口なんですけどCほとんど分からないです
Win32APIが僅かに分かる程度なのです
ブロック崩しは作れたんで応用すればSTGも作れるんだろうけど、やる気が出ませぬ
春休み入って親ともしゃべんねーし友達からもメールこねーし、電話こねーしで
流石にこのままだと樹海付近を散歩しにいきそうなのでここを日記代わりにします
最終目標:DirectX使ってシューティング作る
0422デフォルトの名無しさん
2007/02/04(日) 00:51:22Win32APIで弾幕STG作ります!!
パッドで動けばそれでいい
明日から作りますね自機のドット絵は無意味にキャラ絵にしたいなぁ。と思いつつ今日はもう寝ます
0423デフォルトの名無しさん
2007/02/04(日) 14:32:12この背景素材の使用許可申請中。無理だったら自分で作るからいいですよいいですよ
次は自機のドット絵を描いてみる
0424デフォルトの名無しさん
2007/02/04(日) 20:54:21悪いことはいわねーからバイトぐらいはしとけ。
0425デフォルトの名無しさん
2007/02/07(水) 01:40:32嫌です
ここ数日は遊んでしまったorz
久しぶりに運動して全身筋肉痛
経過:
ドット絵をとりあえず一枚描いた。
それを矢印キーでスムーズに動くようにしてるけどむずい
斜めもいけるようになったけど一つだけ問題が残った。。だるいんで後回し。次のステップへ
企画書?みたいなのを書こうと思った・・・・・
作業の順番決めないと効率悪いし心が折れる
0426デフォルトの名無しさん
2007/02/07(水) 04:10:08順番的に最低でもC言語の基礎を身につける→Win32apiでWincowsプログラミング
でも、ブロック崩し作れたなら、別に順番なんて関係ないか。
>春休み入って親ともしゃべんねーし友達からもメールこねーし
>電話こねーしで
気にすんな。人間関係に悩んでないなら、自己を極めるのに最適な時だ。
孤独は人を強くする。
0427デフォルトの名無しさん
2007/02/07(水) 09:51:41つ 図書館
0428デフォルトの名無しさん
2007/02/07(水) 15:56:25DOS窓でいろんな操作するより単純なゲームのプログラミングのほうが楽でした
孤独に耐えられるか心配ですけど頑張ってみます
>>427
自転車で片道30分かけて行けと申しますか(いつか行こう・・いつか
0429デフォルトの名無しさん
2007/02/07(水) 16:01:21パッドで動かす
↓
弾幕アルゴリズム
QEDの真似事、画像使う
↓
当たり判定
↓
当たり判定を丸にする
経過:
矢印キーでスムーズに動くようになった(無意味に複雑にしてたようだ・・
パッドでも動くようになった
次は弾幕アルゴリズムに触れてみる・・・
まずフランのQEDを真似する事に決定
0430デフォルトの名無しさん
2007/02/07(水) 16:27:38プログラムばっか勉強してると、パソコンでソース書くばっかになって
運動不足になるから、片道30分の自転車は良い運動になるよ。
運動すれば、脳の活性化にもつながるし。
そうしないと、俺みたいなクソデブになっちゃうよ。
クソデブになるとよけいに、運動がおっくうになって悪循環。
もう、俺なんて最悪だよ。超クソデブだよ。
はぁ・・昔は今より体重40kgは少なくて、運動大好きだったのに・・・
0431デフォルトの名無しさん
2007/02/07(水) 17:45:28そ、そんなに自虐しないでください
プログラミングできるって事はそれだけ精神的に強かったって事でしょうし
間食もやめようと思えば出来ますさ
自分は・・体質と生活的に太る事はまず無いんですけど運動不足はヤバイですね(週1などと言わず毎日動かないと。
先日運動した時の筋肉痛が未だ取れないです
0432デフォルトの名無しさん
2007/02/09(金) 02:37:33難し・・・・かった
一日使って中心から弾幕が広がるプログラムは出来た(満月よりも丸いんだぜ!
明日は
敵キャラのドット絵を描く
適当に動くようにする
そっから弾幕発生
弾幕の画像描く
画像を斜めに表示する
円以外の弾幕を考える
当たり判定を丸にする
余った時間でドット絵たくさん描く
0433デフォルトの名無しさん
2007/02/09(金) 02:44:43ttp://up3.viploader.net/mini/src/viploader108611.zip
ほとんど出来ないけど
ここ数日で出来るようになった事は・・・以外と多いはず
vv.exeのソースでここはこうしたほうが良いみたいのあったら是非お願いしますorz
stg01.exeのソースは未完成+ほとんどが可笑しいと思うので後でUPします
ちょっと今日高校生プログラマってどんくらいいるのかしらべてたら多くは無いけどいた。
サイト持ちもいて普通にフリーウェア公開してたし、負けてられn
0434デフォルトの名無しさん
2007/02/09(金) 03:40:25一つ分かったことは、猫でもの本を参考にしてることだ。
別にそれはそれで良いんだけど、メッセージごとの処理を
自分で関数作って、もっとソースの見通しを良くしたらどうでしょう。
c言語で記述してるつもりでもcppファイルって事は、C++として
処理されてるだろうから、クラス作ってさらに処理内容の見通し
を良くしてはどうでしょう。参照も使えますし。
ただ、スレがC言語だからクラスの作り方は知らないかもしれない
ま、別にクラスにすると便利なだけで手間はそうかわらないけど。
とりあえず、自前のヘッダ作って、プロトタイプ宣言は全部放り込んで
ソース用のファイルを増やして、メッセージ内の処理の見通しを
良くした方が良いと思います。
一つのファイル内で、全部の処理書いてると、うんざりしてくると思いますよ。
0435デフォルトの名無しさん
2007/02/09(金) 11:20:03main()
{
double[問1]=3.14; /*円周率*/
double[問2]=20.0 ; /*半径*/
double[問3];
result=[問4];
printf;[問5] 円の面積は[問6]ですと表示させること
return0;
初級だから簡単問題です
0436デフォルトの名無しさん
2007/02/09(金) 11:22:40main()
{
double[問1]=3.14; /*円周率*/
double[問2]=20.0 ; /*半径*/
double[問3];
result=[問4];
printf;[問5] 円の面積は[問6]ですと表示させること
return0;
初級だから簡単問題です
0437デフォルトの名無しさん
2007/02/09(金) 14:14:21アドバイスありがとうございます
猫でもの本っていうことバレましたかw
コメントだけ削っても特徴は出ちゃうんですね
クラスとヘッダ、、やってみます
0438デフォルトの名無しさん
2007/02/09(金) 23:48:41ヘッダファイルばっかりで中身があんまり無いソースとか、こういう事だったんすね。これは便利
ただ、複数のファイルに分割して書くとグローバル関数増えちゃうんですけどこれはしょうがないんですか?
>クラス
少し使い方調べて粘ったけど何だか書き方が違うらしくてエラー出過ぎで諦めました・・
一緒にstructっていうのも出てきて、こっちはとりあえず使えるようになりました
0439デフォルトの名無しさん
2007/02/10(土) 01:05:45ならとりあえずクラスは置いておけ、C++という(一応)別言語の概念だから。
0440デフォルトの名無しさん
2007/02/10(土) 15:13:49どっちつかずな自分がいます(´Д`;)
というか今のところ両方の言語で使える技術しか身について無いので違いもよく分かりません
もう少しこの中間を行き来して使いやすいほうを覚えていくです
経過:
ドット絵の才能を僕にください・・・
自機3枚描きました動かすととても・・・うにょうにょします
0441デフォルトの名無しさん
2007/02/10(土) 22:44:33猫でも分かる本は簡単なんだっていう事が分かってきた
こんだけいろんな書き方あるんじゃ何人かでソフトとか作ったりする時ヤバくね・・・・・・・
やっぱその中に一人くらい凄い人がいてソース繋げるんすかね
0442デフォルトの名無しさん
2007/02/10(土) 23:59:58なるほど
さて、ゲ製作は全然進んで無い・・・・
とりあえず当たり判定を四角から多角形にしようと試みて
八角形にしようと座標を取って
線で結んでそれを自機の上に乗っけてみたかったのに
式が間違ってたらしく、自機が左上の0,0にいるときは確かに正しく乗ってるんだけど動かすと八角形の点結んだ線が拡大縮小した・・・
struct board {int idoo, x, y, w, h;};//自機スピードxy,width,height
struct board jiki = {5, 100, 100, 200, 200};
MoveToEx(hdc_mem, jiki.x+(jiki.w-jiki.x)/2, jiki.y, NULL);
LineTo(hdc_mem, jiki.x+(jiki.w-jiki.x)/2, jiki.y+(jiki.h-jiki.y));
MoveToEx(hdc_mem, jiki.x, jiki.y+(jiki.h-jiki.y)/2, NULL);
LineTo(hdc_mem, jiki.x+(jiki.w-jiki.x), jiki.y+(jiki.h-jiki.y)/2);
MoveToEx(hdc_mem, jiki.x+((jiki.w-jiki.x)/8), jiki.y+((jiki.h-jiki.y)/8), NULL);
LineTo(hdc_mem, jiki.x+((jiki.w-jiki.x)/8)+(jiki.w-jiki.x)-((jiki.w-jiki.x)/4), jiki.y+((jiki.h-jiki.y)/8)+(jiki.h-jiki.y)-((jiki.h-jiki.y)/4));
MoveToEx(hdc_mem, jiki.x+((jiki.w-jiki.x)/8)+(jiki.w-jiki.x)-((jiki.w-jiki.x)/4), jiki.y+((jiki.h-jiki.y)/8), NULL);
LineTo(hdc_mem, jiki.x+((jiki.w-jiki.x)/8), jiki.y+((jiki.h-jiki.y)/8)+(jiki.h-jiki.y)-((jiki.h-jiki.y)/4));
初めてこんな読みにくいもの書いたよ
0444デフォルトの名無しさん
2007/02/13(火) 00:45:25自分の頭を疑うよ・・・
でもこれで何とか当たり判定が四角じゃ無くなる・・・
これを式にするのもまた時間かかるから明日だ・・・・・・
MoveToEx(hdc_mem, jiki.x+jiki.w/2, jiki.y, NULL);
LineTo(hdc_mem, jiki.x+jiki.w/2, jiki.y+jiki.h); //頂点から真下
MoveToEx(hdc_mem, jiki.x, jiki.y+jiki.h/2, NULL);
LineTo(hdc_mem, jiki.x+jiki.w, jiki.y+jiki.h/2); //横真っ直ぐ
MoveToEx(hdc_mem, jiki.x+jiki.w/8, jiki.y+jiki.h/8, NULL);
LineTo(hdc_mem, jiki.x+7*jiki.w/8, jiki.y+7*jiki.h/8);//斜め1
MoveToEx(hdc_mem, jiki.x+7*jiki.w/8, jiki.y+jiki.h/8, NULL);
LineTo(hdc_mem, jiki.x+jiki.w/8, jiki.y+7*jiki.h/8);//斜め2
0445デフォルトの名無しさん
2007/02/13(火) 04:16:11当たり判定を丸にするには丸の中心からの距離を調べればいいのか・・・
八角形にする意味ってあんまり無かった
まぁいいや・・・いつかこの経験は役に経つだろう・・・疲れた。作業時間長いわりに全然進まないんだぜ
もうほんとに寝るぽ
0446助けて・・・
2007/02/15(木) 16:51:483つの整数を入力し,その内の最小値を出力するプログラムを作成せよ.
但し,最小値を算出する関数,"min3"を自分で作成し用いなさい.
また,最小値の出力はメイン文で行うこと.
-------------------------------------------
"表示結果の例"
3つの整数を入力してください。
整数1:5
整数2:-4
整数3:0
最も小さい整数は-4
-------------------------------------------
誰かお助けください!!
0447デフォルトの名無しさん
2007/02/15(木) 16:56:52スレタイ見ろ
ここは「C言語を今日から始める」やつにしか教えないスレだ
ついでに言えばマルチするやつに明日の太陽を見る資格はない
0448デフォルトの名無しさん
2007/02/15(木) 17:01:03int min3(int a, int b, int c)
{
if(a <= b) if(a <= c) return a; else return c;
else if(b <= c) return b; else return c;
}
int main(void)
{
int a, b, c;
printf("3つの整数を入力してください。\n");
printf("整数1\n");
scanf("%d", &a);
printf("整数2\n");
scanf("%d", &b);
printf("整数3\n");
scanf("%d", &c);
printf("最も小さい整数は%d\n", min3(a, b, c));
}
面倒だから scanf のエラーチェックをしていない。
そもそも scanf を使うなとかいう突っ込みはしないでね。
0449デフォルトの名無しさん
2007/02/15(木) 17:02:26これ消してマルチかよ・・・
宿題スレならこのメッセージがあったってノープロブレム
0450デフォルトの名無しさん
2007/02/17(土) 06:03:50何を押しちゃったんだかわかりませんか?
0451デフォルトの名無しさん
2007/02/17(土) 10:33:490452デフォルトの名無しさん
2007/02/20(火) 20:56:50解説を繋ぎ合わせてみたんですが、コンパイルエラーになります。
どこがおかしいのか教えて下さい。できたら理由も。
コードが書いてあって解説、コードが書いてあって解説と
通してのコードが書かれてないので繋ぎ合わせたんです。
宜しくお願いします。
#include <stdio.h>
struct Node {
char name[20];
struct Node *next;
};
int main(void)
{
struct Node list[] = {
{"abe", NULL},
{"asou", NULL},
{"tanigaki", NULL}};
list[0].next = &list[1];
list[1].next = &list[2];
struct Node *p;
p = list;
while (p != NULL) {
printf("名前は%s\n", p->name);
p = p->next;
}
return 0;
}
0453デフォルトの名無しさん
2007/02/20(火) 21:13:42宣言は代入とかの前になければいけないから。
0454452
2007/02/20(火) 21:23:56レスありがとうございます。
無事コンパイル通りましたm(_ _)m
宣言は使う前にすればいいのかと思っていました。
違うんですね。
0455デフォルトの名無しさん
2007/02/22(木) 10:37:12古いCコンパイラにはそういう制限がある。
ちゃんと新しいCコンパイラを使うか、C++としてコンパイルすればそんな下らない制限に引っ掛からないで済む。
0457デフォルトの名無しさん
2007/02/22(木) 21:08:300459デフォルトの名無しさん
2007/03/29(木) 10:36:57今のところ、
インクルード
マクロの定義
構造体、enumなどの宣言
プロトタイプ宣言
extern 変数宣言
の順番にしているのだけれど、こんな感じでいいかな?
何かアドバイスがあればよろしく。
0460デフォルトの名無しさん
2007/03/29(木) 10:37:41身 → 中身
でした。訂正。
0461デフォルトの名無しさん
2007/03/29(木) 11:01:29最後のextern変数宣言はない方がいいな。
特に書いてないが、インクルードガードは忘れずに。
0462デフォルトの名無しさん
2007/03/29(木) 11:23:48プロトタイプに比べればずっと数が少ないだろうし。
0463459
2007/03/29(木) 12:11:50では皆さんどこでextern宣言されているんですか?
0464デフォルトの名無しさん
2007/03/29(木) 12:17:35ヘッダには入れないなあ
0465デフォルトの名無しさん
2007/03/29(木) 12:31:250466デフォルトの名無しさん
2007/03/29(木) 19:58:180467デフォルトの名無しさん
2007/03/29(木) 20:31:31俺も初心者だが
bcpadとかで検索してみ
0468デフォルトの名無しさん
2007/03/30(金) 18:49:41インストールしたんですが使い方がさっぱりわかりません
どうしたらいいんですか?
0469デフォルトの名無しさん
2007/03/30(金) 20:17:190470デフォルトの名無しさん
2007/04/07(土) 07:38:41プログラムの勉強自体初めてなんでwkwkだ。
0471デフォルトの名無しさん
2007/04/08(日) 02:19:120472デフォルトの名無しさん
2007/04/08(日) 02:29:45この度クレジット決済でスムーズにダウンロード売買が
できるサイトを立ち上げました。
つhttp//web-cart.jp/
※会員登録&商品のうp全て無料です!
クオリティの高い商品のうpをお待ちしてますw
0473デフォルトの名無しさん
2007/04/08(日) 02:49:00キレイに並んでるのを見て
*****
****
***
**
*
↑こんなの作りたいなと思ったんですが
全然できません。
教えて頂けませんか?
0474デフォルトの名無しさん
2007/04/08(日) 02:59:50{
printf("*****\n****\n***\n**\n*");
return 0;
}
0475デフォルトの名無しさん
2007/04/08(日) 03:16:34フツーに半角で
*****[Enterキー]****[Enterキー]***[Enterキー]**[Enterキー]*
で、おk
0476デフォルトの名無しさん
2007/04/08(日) 03:31:10ツマンネ
0477デフォルトの名無しさん
2007/04/08(日) 03:31:560478デフォルトの名無しさん
2007/04/08(日) 06:26:34こんな感じで良いか?
#include <stdio.h>
int main(int argc, char *argv[])
{
int i,j;
for(i = 5; i >= 0; i--){
for(j = 0; j <= i; j++){
putchar('*');
}
putchar('\n');
}
return 0;
}
0479デフォルトの名無しさん
2007/04/08(日) 08:12:21こんな感じで良いか?
putC(int n){ if(n){ putchar('*'); putC(n-1); } else putchar('\n'); }
putL(int n){ if(n){ putC(n); putL(n-1); } }
main(){ putL(5); }
0480デフォルトの名無しさん
2007/04/08(日) 08:30:57#define LEN (5)
int main()
{
char star[LEN];
for (int ic = 0; ic < sizeof(star); ++ic) star[ic] = '*';
for (int ic = sizeof(star); ic > 0; --ic) printf("%.*s", ic, star);
return 0;
}
0481デフォルトの名無しさん
2007/04/08(日) 08:35:57int main()
{
char *p = "*****";
while(*p) puts(p++);
}
0482デフォルトの名無しさん
2007/04/08(日) 09:32:550483デフォルトの名無しさん
2007/04/08(日) 10:47:530484473
2007/04/08(日) 18:49:59また、多分わからんことだらけなので
色々勉強に来ます!
0485デフォルトの名無しさん
2007/04/16(月) 22:51:51使い道がわかりません。
0486デフォルトの名無しさん
2007/04/16(月) 23:02:15unionを使うと例えば
float a = 1.3;
const char * p = (const char *) & a;
for (int ic = 0; ic < sizeof(a); ++ic) printf("%02x ", p[ic]);
とおなじことが
union {
float a;
char p[];
} u;
u.a = 1.3;
for (int ic = 0; ic < sizeof(u.p); ++ic) printf("%02x ", u.p[ic]);
と書けます。
0487名無し@沢村
2007/04/16(月) 23:52:39C言語はつまらんぞー!
おみゃーたー、『肥えた語』つー言語があるの知ってる?
おりは知ってるよ。
おりがつくった言語よ。これからh『肥えた語』の時代よ。
URLはここよ↓
http://www.geocities.jp/hontamagod/
感想を頼むなー♪
0488デフォルトの名無しさん
2007/04/17(火) 00:55:190489デフォルトの名無しさん
2007/04/17(火) 00:59:170490名無し@沢村
2007/04/17(火) 01:16:24Super『肥桶』に書き込めがいいよ。
URLはここよ↓
http://www.geocities.jp/hontamagod/
感想を頼むなー♪
0491デフォルトの名無しさん
2007/04/17(火) 14:04:41■ このスレッドは過去ログ倉庫に格納されています