63 :csv ◆d4Q1dM/8Ps :04/04/11 15:21
作ってみた(age)
/* CSVデータ(数値)分割 */
/* ・maxItem迄、item[]に格納 */
/* ・分割できた個数を返す / -1は分割NG */
int divCSV(const char *src, int *item, int maxItem)
{
char *p;
int n,itemNum=0;
if(src==NULL || item==NULL || maxItem<1) return -1;
do{
if((p=strchr(src,','))) *p='\0';
n=sscanf(src, "%d", (item+itemNum)); if(p) *p=',';
if(n<1) return itemNum;
++itemNum;
src=p+1;
}while(p && itemNum<maxItem);
return itemNum;
}
こんなの見つけたけどsrc書き換えちゃってるねw
長い処理の待ち時間の間にコマンドプロンプトの画面上に
\→-→/→| みたいにくるくる回るのを表示したり、プログレス
バーみたいなのを描画したりしてるのはどうやってるのでしょうか。
stdoutに書き出すのと違って、前に出力したやつの上に重ねて(?)
出力してるような感じなんですが、うまくいえなくてスイマセン
954 :
>>928:2005/07/16(土) 13:31:53
こんな質問しといて遅レス真にスマソ
>>929 やっぱだめですか
一つ一つ開放していくしかないのですね
ありがとうございました。
>>953 windowsXPでコマンドプロンプトの場合は
先頭行にいく\r使えばよろし。
\nは改行だからね。
>>955 >先頭行にいく\r使えばよろし。
できれば日本語で説明してください。
配列の配列を動的に確保するのはどうすればいいのでしょうか?
いろいろ調べたのですがわからなくて、、1次元配列の確保ならわかるのですが。
>>957 int * * alloArray2(int size1, int size2)
{
int * * tmp = malloc(sizeof(int *) * size1);
for (int i = 0; i < size1; ++i) {
tmp[i] = malloc(sizeof(int) * size2);
return tmp;
}
void freeArray2(int * * arr2, int size1)
{
for (int i = 0; i < size1; ++i) {
free(arr2[i]);
}
free(arr2);
}
>>957-958 こうすると、組み込みの配列みたいに要素が連続し、
freeも戻り値のポインタに対してだけ実行すればいいのでやや楽。
ただし要素数があまりにも多ければ無理かもしれないが。
void **SquareAlloc(size_t size, size_t x, size_t y)
{
size_t offset = sizeof (void*) * x;
void **pp = malloc(offset + size * x * y);
if (pp)
{
void **ppIndex = pp;
size_t i;
for (i = 0; i < x; i++)
ppIndex[i] = (char *)pp + offset + size * y * i;
}
return pp;
}
malloc(sizeof(int *) * size1); とか malloc(sizeof(int) * size2); がアホ
第1引数で読み込んだテキストファイルの「半角スペース」「全角スペース」「タブ」「改行」を取り除いて
第2引数で指定したファイルに保存するプログラムなんですが
最後にどうしても変な一文字が入ってしまいます。
whileがいけないと思い、do-whileにしたのですがだめでした。
どうやれば消えるでしょうか?どなたか教えてください。
#include<stdio.h>
int main(int argc, char *argv[])
{
int txt;
FILE *before, *after;
before = fopen(argv[1], "r");
after = fopen(argv[2], "w");
do
{
txt = fgetc(before);
if(txt == ' ' || txt == ' ' || txt == '' || txt == '\n') continue;
fputc(txt, after);
fputc(txt, stdout);
}
while(!feof(before));
fclose(before);
fclose(after);
return 0;
}
>>961 ところで全角スペースは1バイト文字じゃないからそれでは判定できない。
963 :
958:2005/07/16(土) 16:29:25
>>961 ストリームからの入力は、fgetc()がEOFを返すまでループするのが常道。
feof()を調べるまでもない。
>>960 アホでない例を所望します。
964 :
961:2005/07/16(土) 16:34:50
>>962 早速の返信ありがとうございます。
全角は判定しませんでした。
全角なしでお願いします
965 :
961:2005/07/16(土) 16:43:46
>>963 feof()を取り除いて作り直したらできました。
ありがとうございました。
>>959 それdoubleの配列でも大丈夫か?整列しない気がするんだが
>>952 ""での引用やカラム中の改行にも対応してないのに無駄に長く汚い
ま、糞ソースだな
class Class{
public:
void method(int (*array)[10] ){}
}
を
class Class{
public:
void method(int ???);
}
void Class::method(int (*array)[10]){}
のように書き換えたいのですが???部分はどのように書いたらよいのでしょうか?
>>968 好きなように書いてください。???部分をどのように書いてもコンパイルできませんから。
>>969 セミコロンを2つほど書き忘れたのは気がつきましたが、
他にもまずいところがありますか?
〃∩ ∧_∧
⊂⌒( ・ω・) はいはいわろすわろす
`ヽ_っ⌒/⌒c
⌒ ⌒
(´〜`;)ああ、イヤダイヤダ。
夏厨が湧き出しちゃったよ。
これから9月まで2ch全体が
つまらなくなるだよな。さっさと
夏終われ。ガキは学校でクセエ
汁垂らして部活でもやってろ。
あーあー、ウザイウザイw
2chぐらいしか楽しみのないニートって大変だな……
ガキ相手に「ボクの遊び場を荒らすな〜!」ってか?
void method(int ???);
void method(int (*array)[10]){}
と書けば答えてもらえたんですかね?
>>969 >>971 的確なアドバイスをありがとうございました。
>>972 笑いを提供できて幸いです。
>まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう
C++とCは違う
976 :
ikaikaikajika:2005/07/17(日) 00:52:48
以下のプログラムはお茶運びロボットのプログラムなのですが、これを
改良してほしいんです。 これは お茶を置いたら タッチセンサーが感知して
ロボット発進、そしてお茶を持ってるときに 障害物を 光センサーが感知
すると 止まり、お茶を取られると、180度回転して、帰るのですが、帰る途中に
障害物を光センサーが感知すると 避けて行くように してほしいんですが?
どうでしょうか?
int main()
{
return 0;
}
>>955 ありがとうございます。なんとかできました。
カンマで区切られたデータを構造体に格納するプログラムってどうすればいいんでしょうか?
abc,def,ghi,jikl
mno,ofi,jik,ji,
.
.
以下延々という感じなのですが
リダイレクションを使って標準入力としていいようなのですが、格納の仕方がわかりません。
scanf
>>980 fgets() + sscanf() w/ "%[^,]"
983 :
980:2005/07/17(日) 18:03:42
>>982 ありがとうございます。あのW/ってどういう意味でしょうか?
T
>>980 >982
関数fgetsと、"%[^,]"を伴った関数sscanf。
配列の初期化で0クリアする場合に
a[5] = { } とするのはベテランの人から見てどうなんでしょうか。
ネットで検索したところ a[5] = { 0 }
988 :
987:2005/07/17(日) 23:12:48
ネットで検索したところ a[5] = { 0 } と書くのはよく見かけたんですが
専門学校の先生には「見た目がよくない」と言われました。
普通に使う書き方なんでしょうか。
memset
先生に訊き返せよ
金払ってんだろ?
>>987 a[5] = { }; は規格で認められているのか?
a[5] = {0}; で通してきたぞ俺は。
>>989 memse は初期化と言いません
俺ならaがchar/wchar_t配列ならchar a[5] = ""; wchar_t a[5] = L"";にする。
ほかはしかたないから{0}にするけど。
memse t⊂(`Д´)
994 :
987:2005/07/17(日) 23:33:52
今慌てて試したら = { } は動きませんでした、勘違いしてたみたいです。
= {0} のほうは普通に使われるみたいですね。
将来人に見せることになると考えると「見た目が悪い」という言葉が気になったので。
見た目が悪いと言った人間に聞くのが一番かと
>>987 適所適材。
「見た目が良い初期化」なんか見たことない。
その教員は鏡でも見てたんだろう。
1000ならC滅亡
>>994 君は先生に質問し、どのような方法であれば見た目が良い方法なのか
ここに報告する義務がある
このスレが終わるまでに報告しなければならない
これは命令だ
gccは={}通るぞ
gcc拡張かよ
1000get
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。