トップページ⇒tech
1001コメント308KB

C言語なら俺に聞け(入門篇) Part 4

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/11/09(木) 00:31:01
C言語の入門者向け解説スレです。
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
C言語なら俺に聞け(入門篇) Part 3
http://pc8.2ch.net/test/read.cgi/tech/1160682950/

過去スレ
Part 1 http://pc8.2ch.net/test/read.cgi/tech/1146700389/
Part 2 http://pc8.2ch.net/test/read.cgi/tech/1153818463/


関連スレ
くだすれC言語(初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1153542424/

【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 130
http://pc8.2ch.net/test/read.cgi/tech/1159613789/
0604デフォルトの名無しさん2006/11/22(水) 13:50:00
共用体ってどんなときにつかうんじゃこの野郎
0605デフォルトの名無しさん2006/11/22(水) 13:54:32
配列(例えばdim[10]など)で
この10部分、添え字のところを外部ファイルのテキストファイルなどから読み込ませることはできないのでしょうか?
#define などを利用すればできるのですかね?
0606デフォルトの名無しさん2006/11/22(水) 13:58:47
できるできる。考えて
0607デフォルトの名無しさん2006/11/22(水) 14:47:46
ポインタ
06085742006/11/22(水) 15:59:14
>>577 >>579
レス遅くなりました.
このレスを保存しておいて,そのレベルまで達したと思えたら挑戦しようと思います.
ありがとうございました.
0609デフォルトの名無しさん2006/11/22(水) 16:46:58
>>582
UTF-8もあるんだったら、UTF-16/32とかUCS4とかUnicode使ったコードを使うべきではないか?
0610デフォルトの名無しさん2006/11/22(水) 18:01:03
>>605
配列の要素数が実行時に決まる様な場合は、これは出来ないよ。
int n;
scanf("%d", &n);
int array[n];

この場合はmalloc()を使って動的に領域を確保してやる必要があるよ。
int n;
scanf("%d", &n);
int *array = (int*)malloc(sizeof(int) * n);

それとmalloc()で確保した領域は、必ずfree()で開放する必要があるから気を付けて。
上の例だとこんな感じで。
free(array);
0611デフォルトの名無しさん2006/11/22(水) 19:00:27
>配列の要素数が実行時に決まる様な場合は、これは出来ないよ。
手元の環境で試したらできましたがやらない方がいいのでしょうか。
0612デフォルトの名無しさん2006/11/22(水) 19:03:48
C99からはできるようになっただろ。
0613デフォルトの名無しさん2006/11/22(水) 19:06:14
実行中に要素数が変わらないのなら問題ない
0614デフォルトの名無しさん2006/11/22(水) 19:25:14
>>612
そうだったのか。
古いコンパイラしか使ってなかったので知らんかったよ。
C言語も変わったなぁ。
0615デフォルトの名無しさん2006/11/22(水) 20:38:07
大丈夫、今もみんなmallocなんかを使っている。
C99対応コンパイラなんて俺はGCCしか知らない。
0616デフォルトの名無しさん2006/11/22(水) 20:38:18
ANSI-C以外は認めない。
0617デフォルトの名無しさん2006/11/22(水) 20:59:14
ANSI-Cも認めない。
0618デフォルトの名無しさん2006/11/22(水) 21:01:17
だが、ISO C90/C99は認める。
0619デフォルトの名無しさん2006/11/22(水) 21:40:01
「ANSI-C」って。
0620デフォルトの名無しさん2006/11/22(水) 21:56:56
JIS X 3010:2003 なら認める。
0621デフォルトの名無しさん2006/11/22(水) 22:20:57
ワードパッドの印刷で、印刷のページ指定を「0-0」にすると挙動が変。
0622デフォルトの名無しさん2006/11/22(水) 22:54:53
しらんがな
0623デフォルトの名無しさん2006/11/22(水) 23:01:30
C99でuint32_t とuint_fast32_t等
の両方がある意味がわかりません

計算が速い32ビットの整数型があるなら
uint32_tに割り当てれば済む話のような気もするんですが・・・

0624デフォルトの名無しさん2006/11/22(水) 23:07:33
>>623
32bitより64bitが速い環境なら、uint_fast32_tは64bitになるんじゃね?
0625デフォルトの名無しさん2006/11/22(水) 23:08:01
int_fast32_t 最低 32 ビットの最も効率的な符合付き整数
       ~~~~~
0626デフォルトの名無しさん2006/11/23(木) 01:23:16
cでc++のstringみたいに可変長文字列を簡単にあつかう方法ありませんか
string.appendみたいなかんじで文字をくっつけるのを簡単にやりたいです
strcatとかは元のバッファサイズの確保が面倒とおもっています
0627デフォルトの名無しさん2006/11/23(木) 01:30:55
#include<stdio.h>
#include<time.h>
#include<stdlib.h>

#define MTX 3
#define CMTX(x) (x)*(x)

//ボード
int board[MTX][MTX];

void initBoard(void);

main(){
srand(time(NULL));
printf("【%d ゲーム】\n",CMTX(MTX));

initBoard();
return 0;
}

0628デフォルトの名無しさん2006/11/23(木) 01:31:56
//ボードの初期化を行う関数
void initBoard(void){
int i,j;
int r;//ランダムな値
int useDigit[100];//既に数値が使われているか否かを記録する配列

for(j = 1; j <= MTX; j++){//縦方向繰り返し
for(i = 1; i <= MTX; i++){//横方向の繰り返し
//最後のマスなら終了
if((j == MTX) && (i == MTX)){break;}
do{
r = rand()%(CMTX[MTX]-1)+1;
}
while(useDigit[r-1] == 1);
board[j-1][i-1] = r;//ボードに代入する
useDigit[r-1] = 1;//使われた数値をチェックする
printf("%02",r);
}
printf("\n");
}
board[MTX-1][MTX-1] = 0;//最後のマスに0を代入する
}

Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
10-1.c:
エラー E2451 10-1.c 32: 未定義のシンボル CMTX(関数 initBoard )
*** 1 errors in Compile ***

この、32行目のエラーがどうしても解決しないので
ご指摘お願いします。
0629デフォルトの名無しさん2006/11/23(木) 01:34:31
>>626
strxxx関数の類が面倒というなら、
文字列と長さを格納した構造体と、それを操作する関数群を自作して
stringクラス相当のことをC言語の仕様の中で実装するくらいしかないんじゃない?
探せば既に誰かが作っているかも。標準には存在しない。
0630デフォルトの名無しさん2006/11/23(木) 01:36:16
>>628
CMTXはマクロ関数として定義している。
CMTX[MTX]というのは使い方が間違っている。
0631デフォルトの名無しさん2006/11/23(木) 01:38:13
>>630
ご返答、ありがとうございます。

本ではこの様になっていますが・・・
では、どのように直せば宜しいのでしょうか?
ご指摘お願いします。
0632デフォルトの名無しさん2006/11/23(木) 01:39:47
>>631
CMTX(MTX)にするといいよ!
0633デフォルトの名無しさん2006/11/23(木) 01:46:11
>>632
ありがとうございました!
できましたが、一つ問題が発生しました

実行結果が
C:\bbb>10-1
【9 ゲーム】
070801
020403
0605
なってしまいます

C:\bbb>10-1
【9 ゲーム】
07 08 01
02 04 03
06 05

のように一行あけたいのですが・・・
何処をどうかえれば、こうなるでしょうか?
0634デフォルトの名無しさん2006/11/23(木) 01:49:47
>>633
たぶん、このへんだよ!
useDigit[r-1] = 1;//使われた数値をチェックする
printf("%02 ",r);←/*ここに空白を入れる*/
0635デフォルトの名無しさん2006/11/23(木) 01:55:31
>>634
できました!!!
ありがとうございました
0636デフォルトの名無しさん2006/11/23(木) 02:24:09
C言語でjpgとか表示できる関数てどのくらいあるかわかるサイトないでしょうか?
0637デフォルトの名無しさん2006/11/23(木) 03:21:57
難しい注文だなw
google 辺りで上手くやればなんとかなるか?
0638デフォルトの名無しさん2006/11/23(木) 03:23:13
コラムを行とか言うヤツ初めて見た。
0639デフォルトの名無しさん2006/11/23(木) 03:30:34
GLFCのWindows版についてわかる方いらっしゃいませんか?
手に入れたいんですが、検索しても何も引っかからないもんで
0640627-6282006/11/23(木) 05:17:27
度々、質問ですみません。

ここの所で二つほど疑問があるのでご助言戴けたら、幸いです。
先ず一つ目は、>>627->>628 特に>>628のソースで

//最後のマスなら終了
if((j == MTX) && (i == MTX)){break;}
do{
r = rand()%(CMTX[MTX]-1)+1;
}
while(useDigit[r-1] == 1);
board[j-1][i-1] = r;//ボードに代入する
useDigit[r-1] = 1;//使われた数値をチェックする

-1や+1が出てきて、今一よくわかりません
参考書に依れば、添え字で云々と難しく解説が
書かれています。
ですので簡単に解りやすく助言して戴きたいのと

もう一つは、
>>if((j == MTX) && (i == MTX)){break;}
で、MTXとは3でしょうか、もしくは9でしょうか?

ご返答、宜しくお願いします。
0641627-6282006/11/23(木) 05:26:00
自分なりに混乱している部分は
マスが1〜9あって1〜8まで数値をマスの中に
振り当てるから、ー1になるのと
添え字でー1になる事です。
0642627-6282006/11/23(木) 05:32:42
添え字の所では
配列の添え字は0から始まるので、rand関数で出た数値が
7の時は7−1でuseDigit[6]の位置に1を代入しておきます。

参考書依り抜粋

これが特にちんぷんかんぷんです。
0643デフォルトの名無しさん2006/11/23(木) 06:56:30
>642
10個の箱があります。
それぞれに番号をつけることにしました。
0からつけはじめて9まで付けたら番号の付いてない箱がなくなりました。
1個目の箱の番号は0です。
10個目の箱の番号は9です。
次に、箱に順番に1から10までの数字を入れることにしました。
1個目の箱には1が入りました。
10個目の箱には10が入りました。

さて問題です。
7が入ってる箱の番号はいくつでしょう?
0644デフォルトの名無しさん2006/11/23(木) 11:04:12
[0] = 1
[1] = 2
[2] = 3
[3] = 4
[4] = 5
[5] = 6
[6] = 7
[7] = 8
[8] = 9
[9] = 10
[10]= 11
0645ぴゅあ2006/11/23(木) 13:50:35
>>640
>for(j = 1; j <= MTX; j++){//縦方向繰り返し
>for(i = 1; i <= MTX; i++){//横方向の繰り返し
でのi,jが持つ値と
>board[j-1][i-1] = r;//ボードに代入する
での配列の添え字との関係

>r = rand()%(CMTX[MTX]-1)+1;
でrand()が返すだろう最小値,rが取る値と
>useDigit[r-1] = 1;//使われた数値をチェックする
での配列の添え字との関係

・扱う値としては1〜としたいけど …i,j,r等(r = rand() ...ではそのために"+1")
・配列の添え字は0〜だから"-1"
と読めるんではないでしょうか


>>>if((j == MTX) && (i == MTX)){break;}
>で、MTXとは3でしょうか、もしくは9でしょうか?
どのようにして3と思ってみたのか、もしくは9と思ってみたんでしょうか
思った"わけ"がある筈
(3か9か(或いは全く違うか)の答え(数字)を知るだけでなく、どう解釈した/或いは間違いに至った経緯は後々のためにも把握しておいた方がいいかも)

>#define MTX 3
ではないですか?
0646ぴゅあ2006/11/23(木) 13:52:02
>>642
>配列の添え字は0から始まるので、rand関数で出た数値が
>7の時は7−1でuseDigit[6]の位置に1を代入しておきます。

・配列の添え字は0から始まる
・rand関数で出た数値が → それらから求めた変数rに入れた値(1から始まる)
・7の時は7−1で → "1から始まる値"を"0から始まる値"に
・ということで、useDigit[6]の位置

>>645が解れば、解説不要だろうと思いますけど
0647デフォルトの名無しさん2006/11/23(木) 14:17:56
cで配列のサイズをとるのはないのでしょうか。
javaでいうところの配列変数.length、vbでいうところのubound(配列変数)です。
mainとかで配列の個数ももらっているから無いのでは?
0648デフォルトの名無しさん2006/11/23(木) 14:20:55
>>647
配列ならsizeof
配列の要素へのポインタなら無理
0649デフォルトの名無しさん2006/11/23(木) 14:32:59
>>648
ただsizeofだとバイト単位になってしまうので、
配列の個数を求めるには型のサイズで割らないといけませんね。
0650デフォルトの名無しさん2006/11/23(木) 14:39:22
マジ糞言語だなこれwww
0651デフォルトの名無しさん2006/11/23(木) 14:44:00
>>650
インテリはみんな、アナルとスカトロ好きだろ?
0652ぴゅあ2006/11/23(木) 14:46:25
>>647
>javaでいうところの配列変数.length
はちょっと毛色が違うところ…と思うけど

>vbでいうところのubound(配列変数)
は元々BASICが添え字の0始まり/1始まりを選択できる(何時からできるようになったのかはもう忘れたけど)
というところからlbound/uboundが生まれたりしたんだろうと思うけど

Cでは定数にしたり>>647の言ってるsizeofとか利用しつつ自分で管理
>配列の要素へのポインタなら無理
も自前で対応
>配列の個数を求めるには型のサイズで割らないといけませんね。
もマクロで対応してみたりとかされてきています

>mainとかで配列の個数ももらっているから無いのでは?
は、"配列の個数ももらっている"のではなくて
「要素数を渡さないと判らない(定数(固定値)にならない)から
(mainを呼び出す側が)渡している」んです
と理解できればいいと思います
0653デフォルトの名無しさん2006/11/23(木) 14:47:43
length なんかの管理領域すら惜しい頃からC言語はあるんだよ
06546472006/11/23(木) 14:48:49
>>648-649
ご回答ありがとうございます。
そうか、配列でとってるからsizeof(配列変数)/sizeof(型名)で逝けるんですね
よーく考えてみたら、やりたいことはmallocとかでとった領域のサイズをしりたいことでした。
ポインタだからムリなんですね。mallocとかってサイズ調整してるみたいだし。

関数とかにmallocで領域取った部分にunsigned charの配列をいれて、
関数内で処理しようとおもったら、関数呼ぶ側からサイズも渡してやらないといけないんですね。
文字列でなくてファイルからとったバイナリ値を操作する関数をつくってます。
lengthとかuboundとかがありがたく思えてきました。
関数にポインタ渡すときはサイズも渡すようにしようと思います。ありがとうございました。
06556472006/11/23(木) 14:51:33
×やりたいことはmallocとかでとった領域のサイズをしりたいことでした。
○やりたいことはmallocとかでとった領域に入ってるどこかで入れた内容のサイズをしりたいことでした。
0656ぴゅあ2006/11/23(木) 15:03:28
>>654
>mallocとかってサイズ調整してるみたいだし。
これはコード上より内部的な話なので、考えなくていいと思います
(>mallocとかでとった領域のサイズをしりたいことでした。
mallocの際に必ずサイズを渡している筈なので、それを渡せていればいい…ですね)
0657デフォルトの名無しさん2006/11/23(木) 15:29:16
http://ranobe.com/up/src/up152115.lzh

ファイルからの読み出しで最大値、最小値を表示するプログラムなんですが、
数字以外が含まれるとループし続けてしまいます。
エラーを返すようにしたいのですが、どうすればいいでしょうか?
0658デフォルトの名無しさん2006/11/23(木) 15:30:13
>>657
scanf を使わず getcharを使う
0659デフォルトの名無しさん2006/11/23(木) 15:34:40
>>649 型のサイズもsizeofで書くと失敗しないよ
06606472006/11/23(木) 15:42:34
>>659
配列のサイズのとりかた
unsigned char hoge[255];
printf("length = %d\n", sizeof(hoge) / sizeof(unsigned char);
ですね。ありがとうございます。
0661ぴゅあ2006/11/23(木) 15:49:55
マクロにすると便利かと思ったりするけど
スルーっぽさを漂わせてるみたいだから別にいっか
0662ぴゅあ2006/11/23(木) 16:36:32
My name is pure.
However, it is not a pure mind.
It is a question though is sudden.
Do you think that I am a person in question?
Or, the pretender?
Do you understand?
0663デフォルトの名無しさん2006/11/23(木) 16:41:46
>>660
sizeof(hoge) / sizeof(hoge[0])

hoge が構造体でもどんな型でもつかえる。
0664デフォルトの名無しさん2006/11/23(木) 16:44:04
>>662
my.name = pure;
it = my.
however(it!=pure.mind);
assert(it & (QUESTION | SUDDEN));
you = I == person[QUESTION] ? 1: I==PRETENDER ? 2: ~UNDERSTAND;
06656232006/11/23(木) 17:51:02
>>624
>>625
今さらですが、ありがとうございました
(u)int32_tはピッタリ32bitの事かと勘違いしてました
06666232006/11/23(木) 17:52:46
訂正
(u)int_fast32_tはピッタリ32bitの事かと勘違いしてました
0667デフォルトの名無しさん2006/11/23(木) 18:04:50
>>657
数値の取得にfscanf()を使っているならfgets()+sscanf()にして戻り値をチェックしたまえ。
sscanf()の代わりに、strtol()/strtod()で変換終了点をチェックしてもいいけど。
0668デフォルトの名無しさん2006/11/23(木) 19:46:58
>>657
fscanf()のリターン値のチェックがEOFしかやってないじゃん。
1以外だったらループを抜けるって処理も入ってないと。
0669デフォルトの名無しさん2006/11/23(木) 20:34:20
2つ質問です。

C++では定数はconstで定義することが普通のようですが、Cではどうなんでしょうか?
色々なサイトを見てみると、#defineでやってるのが多いようですが。
なぜconstで定義しないのでしょうか?

もう一つ、ヘッダファイルにconstで定数を定義しようと考えたのですが、どちらが
一般的でしょうが?
1.ヘッダファイルにstatic constで定義する。
2.ヘッダファイルに対応する.cファイルに実体を定義し、ヘッダファイルでexternする。
0670デフォルトの名無しさん2006/11/23(木) 21:16:38
>>669
Cではconstで定義したものを、定数式が要求されるところ
(配列宣言時の要素数やcaseラベルなど)で使うことができない。
そんなCを見て、C++ではconstで定数を定義できるようになった。

だからCでヘッダにconstな変数宣言をおくのは、そもそも一般的ではない。
C++では、staticなしでconst使うが(少なくとも整数型ではそれで問題ないようになっている)。
0671デフォルトの名無しさん2006/11/23(木) 21:25:30
整数型以外だとなにか問題あるケースがあるの?
0672デフォルトの名無しさん2006/11/23(木) 21:50:06
クラスオブジェクトだとコンストラクタ・デストラクタがあるから、
どうなるか俺は規格書を見ないとわからない。
0673デフォルトの名無しさん2006/11/23(木) 22:10:48
ああ,クラスか.
文字列とか,実数でなにかあるのかと思った.
06746692006/11/23(木) 23:26:18
>>670
Cではconst変数と定数は区別しなくちゃいけないんですね。
で、定数と同じ使い勝手を保ちつつ定数に名前を付けるとしたら
#defineしかない、ということですか。
良く分かりました。有難うございました。
0675デフォルトの名無しさん2006/11/24(金) 00:17:32
C言語で違うディレクトリのファイルの内容を書き換えたいんだけど、
どうやってやるんでしょう。
0676デフォルトの名無しさん2006/11/24(金) 00:19:58
>>676
カレントディレクトリのファイルと要領は同じ。開くファイル名を相対パス名にすればいいだけ。
06776752006/11/24(金) 00:32:27
こんな感じにやってみたけど駄目だ。
レスサンクス
if((sfp = fopen(..\fff.txt,"r"))==NULL)
puts("コピー元、オープンできませんでした。");
0678デフォルトの名無しさん2006/11/24(金) 00:33:41
\ → \\
06796752006/11/24(金) 00:34:43
一つ上のカレントディレクトリのファイルを開こうとしてるんだけど。
コンパイルエラーでございます。
0680デフォルトの名無しさん2006/11/24(金) 00:35:03
>>677
..\fff.txt
これ”..\\fff.txt” じゃなきゃダメなんジャマイカ?
0681デフォルトの名無しさん2006/11/24(金) 00:35:20
if((sfp = fopen(..\fff.txt,"r"))==NULL)
↓
if((sfp = fopen("../fff.txt","r"))==NULL)
06826752006/11/24(金) 00:37:26
出来たwww
すげーありがと
またよろしくーーーwww
0683デフォルトの名無しさん2006/11/24(金) 02:05:08
while(1)の(1)は、どんな意味があるのでしょうか?
0684デフォルトの名無しさん2006/11/24(金) 02:06:15
真偽値の真
0685デフォルトの名無しさん2006/11/24(金) 02:12:34
サンクスだす
0686デフォルトの名無しさん2006/11/24(金) 05:51:10
>>674
定数ならenum 使うべき。
0687ぴゅあ2006/11/24(金) 07:52:52
>>686
適材適所でしょ

>>679
ちっちゃいツッコミですけど
>一つ上のカレントディレクトリ
カレントディレクトリの一つ上の(カレントとは言わない)ディレクトリ
と呼ぶです

>>683
Cでは0(偽)ではない値を真(0以外)と捉えてやってください
whileと組み合わせてwhile(1)は"無限にループさせたい"
0688デフォルトの名無しさん2006/11/24(金) 11:09:26
どっちかと言えば、for (;;) 推奨。
0689デフォルトの名無しさん2006/11/24(金) 11:16:23
それキメェからやめろ。
0690デフォルトの名無しさん2006/11/24(金) 11:26:54
んじゃ、
#define ever (;;)
for ever
とか、
#define _
for (;_;)
とか。
0691デフォルトの名無しさん2006/11/24(金) 12:43:40
#include<math.h>
#include<stdio.h>
#include<string.h>
void wait(int tm)
{int i,j;
for (i = 1;i < tm; i++)
for(j = 1;j < tm; j++){
double x = sin(i) * cos(j);}}
int main(void)
{
int cnt = 0;
char mes[] = "あいうえ";
int len = strlen(mes);
while(1){
int i;
putchar('\r');
for (i = 0;i<strlen(mes);i+=2){
if(cnt + i<len){
putchar(mes[cnt + i]);
putchar(mes[cnt + i+1]);}else{
putchar(mes[(cnt + i) % 8]);
putchar(mes[(cnt + i+1)%8]);}}
wait(2000);
if(cnt < len - 1)
cnt+=2;
else
cnt = 0;
}return(0);}
これを右に流れるようにしたい
0692デフォルトの名無しさん2006/11/24(金) 12:45:30
すれば?
0693デフォルトの名無しさん2006/11/24(金) 12:46:37
while ( "loop forever" )
0694デフォルトの名無しさん2006/11/24(金) 13:05:42
ファイルの一部分の変更の仕方が分かりません。
例えば set の次の0を1に変える方法です。
助言プリーズ
while(*fp[pt] != '\0') && (temp[pp] != '\0')){
if(*fp[pt]== temp[pp]){
pt++;
pp++;
}
else{
pt=pt-pp+1;
pp=0;
}
}
if(temp[pp]=='\0'){
while(*fp[pt] != "A-Z" || *fp[pt] != "a-z" ){
switch(*fp[pt]){
case ' ': pt++; break;
case '0': *fp[pt]='1';
puts("0を1に書き換えました");
break;
case '1': puts("すでに1です。");
break;

}
}
puts("処理は無事、終了しています。");

長くてすみません。
0695デフォルトの名無しさん2006/11/24(金) 13:08:28
while(*fp[pt] != "A-Z" || *fp[pt] != "a-z" ){
この条件が真になるの?
06966952006/11/24(金) 13:23:50
よく見たら常に真の無限ループだった orz

この条件が偽になるの?だな
0697デフォルトの名無しさん2006/11/24(金) 13:27:50
>>694
ちょっと書き替える程度のことでそんなキメーことすんなよ。
0698デフォルトの名無しさん2006/11/24(金) 13:28:41
>>694
man sed
0699デフォルトの名無しさん2006/11/24(金) 13:28:58
>>694
>while(*fp[pt] != "A-Z" || *fp[pt] != "a-z" ){
ローマ字以外の時だけ繰り返すって意味なら
while !((*fp[pt] >= 'A' && *fp[pt] <='Z') || (*fp[pt] >= 'a' && *fp[pt] <= 'z') ){
こんな感じになる
07006942006/11/24(金) 13:31:04
setの次の数字を0から1に変えたくてtemp[]="set"としています。
*fpはFILE型のポインタでchar型でなく、int型としてしか取り扱えない
ようなエラー内容。fopen関数でfpに変更したいファイルを'r+'で
オープンしています。
695の内容はsetの次の数字以外の文字が来たときにはプログラムが終了
するような意図を持って記入しました。英文字が来たら終了の意図です。
自信ないんですが。
0701デフォルトの名無しさん2006/11/24(金) 13:32:24
#include<ctype.h>
while(!isalpha(*fp[pt]))
0702デフォルトの名無しさん2006/11/24(金) 13:33:09
ファイル操作が FILE* fp = fopen() の後
直接 *fp or fp[] で操作する と想像したお前に完敗
07036942006/11/24(金) 13:35:35
なるほどーー,全然違いましたねw>>699
ぐぐってみます>>698
ど素人ですw>>697
0704デフォルトの名無しさん2006/11/24(金) 13:35:57
それってコンパイルできないんじゃ
■ このスレッドは過去ログ倉庫に格納されています