C言語なら俺に聞け(入門篇) Part 15at TECH
C言語なら俺に聞け(入門篇) Part 15 - 暇つぶし2ch671:デフォルトの名無しさん
07/07/04 20:19:53
あ、数字がずれてる…。
sunのnの下に1がきてmonのnのしたに2がくる感じです

672:デフォルトの名無しさん
07/07/04 20:38:15
URLリンク(kansai2channeler.hp.infoseek.co.jp)

上のプログラムは、入力した文字を逆向きにプリントしちゃうはずの
自分でゆうのもなんですが、優れものなんです。が
実行すると、何故か変な文字列が入っちゃいます><
こんな感じ↓(testと入力した場合)
URLリンク(www.uploda.org)

どなたか、原因を教えてくださいな
教えてくれた方に、僕のケツ穴差し上げます><


673:デフォルトの名無しさん
07/07/04 20:42:44
ソース見た瞬間意識が朦朧としてきた

674:デフォルトの名無しさん
07/07/04 20:49:51
>672
文字列の終端は'\n'じゃない
てめえの汚えケツ穴なんぞ誰がいるかってんだ

675:デフォルトの名無しさん
07/07/04 21:05:09
>>673
朦朧としてると、こっちから押し倒しちゃうze(はぁと

>>674
ありがちんこ☆
\0か!


676:デフォルトの名無しさん
07/07/04 21:09:59
あえて断言しよう

>>674は絶好のチャンスを失った、と。


677:デフォルトの名無しさん
07/07/04 21:12:21
>>670
#include <unistd.h>
int main(int argc, char *argv[]){return execlp("cal", "cal", argv[2], argv[1], NULL);}


678:デフォルトの名無しさん
07/07/04 21:14:37
例えば、以下のような4つの要素からなる列が複数あるものに対して、
次のような処理:
(1)1番目の要素が同一の場合、後から出現したものを採用する
(2)3番目の要素でソートする
を行いたいのですが、どのようなアルゴリズムになりますか?

例)
0010 ABC 60 70
0022 BCD 56 76
0010 EFG 85 34
0003 HIJ 70 98



0010 EFG 85 34
0003 HIJ 70 98
0022 BCD 56 76


679:デフォルトの名無しさん
07/07/04 21:15:51
普通に配列につめてソートします。

680:678
07/07/04 21:50:09
>>679
普通に配列からソートする場合、
どのように(1)の条件をクリアしますか?
そこで困っています。

681:デフォルトの名無しさん
07/07/04 21:59:03
同じものが出てきたら上書きする

682:デフォルトの名無しさん
07/07/04 22:25:35
1番目の要素が同一かどうか調べて、同一なら上書きすればいい(例だと、消去してる?)

683:デフォルトの名無しさん
07/07/04 22:29:19
>>680
0000番から9999番までの箱を用意してそれぞれの箱に入れていく。
で、既に入ってる場合は入ってるものを捨てて代わりを入れる。

全部入れ終わったらソート。

無駄だらけだけど分かりやすい考え方だとこんな感じ?

684:デフォルトの名無しさん
07/07/04 22:30:50
int i, j, k, n;
for(i=n-1; i> 0; i--) {
   for(j=i-1; j>=0; j--) {
      if(a[j]==a[i]) {
         for(k=j; k<n-1; k++) a[k] = a[k+1];
         n--;
         i--;
      }
   }
}
こんな感じで同じものを消去すりゃいいんじゃね?

685:デフォルトの名無しさん
07/07/04 22:31:14
ソートしてからの方が効率いいだろ・・・

686:デフォルトの名無しさん
07/07/04 22:34:55
>>685
ソートしちゃうとどれが先にでてきたか分からなくならない?
いや、マージソートとかならいいけど

687:デフォルトの名無しさん
07/07/04 22:38:45
>>686
そのための安定ソートだろ
入門篇ならバブルソートだろう

688:デフォルトの名無しさん
07/07/04 22:44:16
>>685
ソートは3番目の要素でするんだぞ?

689:678
07/07/04 22:45:58
>>683
それ考えたんですけど、
実際は0000000000番から9999999999番まで(10桁)あり、
番号も全部あるわけじゃないからやっぱり効率悪いですよね。
はやさも求められているんで・・・

ハッシュとか2分探索とか使うんですかね?

690:デフォルトの名無しさん
07/07/04 22:50:51
>688
一番目の要素で安定ソート
一番目の要素でのかぶりを削除
三番目の要素でソート
ってことだろ。

691:デフォルトの名無しさん
07/07/04 22:53:29
インデックス情報を付加しといて qsort という手もある。

692:デフォルトの名無しさん
07/07/04 23:05:49
標準ライブラリに無いのが難点だけど
重複してるかどうか調べるのはハッシュ使うのがいいと思う

693:デフォルトの名無しさん
07/07/04 23:08:01
インデックス用の配列mallocしてqsortが一番楽だろ

694:デフォルトの名無しさん
07/07/05 09:38:27
>>672
それどっかの入門書に載ってたぞ

695:デフォルトの名無しさん
07/07/05 15:50:14
CからつかえるフリーのXMLライブラリないですか?

696:デフォルトの名無しさん
07/07/05 15:53:13
何方か標準関数のプログラムの作り方教えてください

697:デフォルトの名無しさん
07/07/05 15:54:07
日本語でもう一度

698:デフォルトの名無しさん
07/07/05 15:55:33
>>672見たらmain内で関数宣言してるけど、これはなに?
そういう手法があるの?関数の内容よりそっちに目がいった。
こんなことしたことないけど、どうなの?

699:デフォルトの名無しさん
07/07/05 15:58:24
そりゃキミが知らないだけだろ

700:デフォルトの名無しさん
07/07/05 16:06:00
プロトタイプ宣言くらい関数内でできる。

701:デフォルトの名無しさん
07/07/05 16:41:17
次のような関数を作りました。
Vertices isMaxNoVer(Vertices R[]){
  Vertices max;
  int i, count=0;

  max.num = 0;
  max.deg = 0;
  max.no = 0;

  count = countVer(R);

  for(i=0; i<count-1; i++){
    if(max.no < R[i].no){
      max = R[i];
    }
  }

  return max;
}


この関数を、次の再帰関数を使って二度目に呼び出した時、
動作がおかしくなり、以下のようなおかしな値が入ります。
test expand 1, 8 -1073747304 134516287
更にその後2度目のtest expand 3に入る前に
セグメントエラーを起こして止まってしまいます。
これだけの情報でわかって頂けるかわかりませんが、
誰か助けてください。

702:701
07/07/05 16:42:43
void expand(Vertices R[]){
  Vertices p, buf[N], Rp[N];

  while(countVer(R) != 0){
    p = isMaxNoVer(R);

    printf("test expand 1, %d %d %d\n", p.num, p.deg, p.no);
 
    if((countVer(Q) + p.no) > countVer(Qmax)){
      syokikaVer(buf);
      mataha(Q, p);
      printf("test expand 2\n");
      syokikaVer(buf);
      ganma(buf, p.no, G);
      printf("test expand 3\n");
      syokikaVer(Rp);
      katu(Rp, buf, R);
      printf("test expand 4\n");

703:701
07/07/05 16:44:38
      if(countVer(Rp) != 0){
numberSort(Rp);
expand(Rp);
      }
      else if(countVer(Q) > countVer(Qmax)){
copyVer(Qmax, Q);
      }
      hiku(p, Q);
    }
    else return;
    hiku(p, R);
  }
  return;
}

QやQmax、Gはグローバル変数です。

704:デフォルトの名無しさん
07/07/05 18:03:30
>>701
それだけだと分からんなぁ~
katu(Rp, buf, R);
numberSort(Rp);
このへんの関数に問題ありそうだけど

705:デフォルトの名無しさん
07/07/05 18:29:52
質問です。
今、以下のような関数と構造体を作ったのですが、

typedef struct
{
    int Length, Maximam, ValueSize;
    void* Array;
} ArrayList;

char* GetValue(ArrayList* list, int index)
{
    char* data = (char*)list->Array, item = malloc(list->ValueSize);
    int i = 0;
    unsigned int p = index * list->ValueSize;
    if(list->Length > index && item != NULL) {
        for(; i < list->ValueSize; i++) {
            item[i] = data[p + i];
        }
        return item;
    } else {
        return NULL;
    }
}

以下続く

706:デフォルトの名無しさん
07/07/05 18:33:11
item

707:705
07/07/05 18:33:11
void AddRange(ArrayList* list, const void* values, int length)
{
    char* data = (char*)list->Array, item = (char*)values;
    unsigned int i = 0, itemlength = length * list->Maximam, index = list->Length * list->ValueSize;
    if(list->Length + length >= list->Maximam) {
        list->Maximam += length * 2;
        list->Array = realloc(list->Array, list->ValueSize * list->Maximam);
    } for(; i < itemlength; i++) { data[index + i] = item[i]; }
    list->Length += length;
}

void main (void)
{
    ArrayList list = { 0, 4, sizeof(int), malloc(sizeof(int) * 4) };
    int i = 0;
    int s[10] = { 0, 1, 2, 3, 4, 5, 6 ,7 ,8 ,9 };
    AddRange(&list, s, 10); AddRange(&list, s, 10);
    for(; i < list.Length; i++) { printf("%d\n", *((int*)GetValue(&list, i))); }
}

どうしてもGetValueのchar* itemの領域が確保できないんです。
他にも、listのArrayをいじってもヒープが壊れてますとか言われるのですが…
なにかやってはいけないことでもやってしまっているのでしょうか?
行数圧縮しているため読みにくいとは思いますが、よろしくお願いします。

708:705
07/07/05 18:34:36
ちなみに、元のソースではすべて

int i = 0;
int j = 0;

のように宣言しています。

709:デフォルトの名無しさん
07/07/05 18:38:04
itemはchar型変数として宣言されてる
*itemで宣言しなきゃダメだろ

710:デフォルトの名無しさん
07/07/05 18:41:16
>>709
元ソースでは
char*になってたんですが…
削りすぎた orz

711:705
07/07/05 19:07:04
いろいろ試してみたのですが、
AddRange(&list, s, 10);を
連続でなくとも2回使用するとGetValueのitemの中がNULLに、
3回目からはAddRange(&list, s, 10);で行われるreallocで
ヒープが壊れているというエラーが出てくるようです。

何が悪いんだろ orz

712:デフォルトの名無しさん
07/07/05 19:09:20
AddRangeの2回目でヒープ壊してる
itemlengthとreallocのサイズが乖離してる

713:デフォルトの名無しさん
07/07/05 19:17:30
つーかGetValue()って範囲チェック除けば
char *GetValue(ArrayList list, int index)
{
return (char*)list.Array + index * list.ValueSize;
}
これで十分じゃね?

714:デフォルトの名無しさん
07/07/05 19:24:04
itemlength = length * list->Maximam → itemlength = length * list->ValueSize
でいけるかな?


715:デフォルトの名無しさん
07/07/05 19:29:48
>>712
itemlength = length * list->Maximam
のMaximamが原因でした。ValueSizeにするはずだったのに…
1回の使用だけだとエラーが出なかったので問題ないと思い込んで
気づかなかった orz

>>713
そんなやり方もあったんですか…
void*だとサイズわかんねぇよって怒られるのでchar*にして
コピーする方法しか知りませんでした。

>>714
全くその通りです。
まともにコードかけるようになるのは時間がかかりそうだ orz

ありがとうございました!

716:デフォルトの名無しさん
07/07/05 19:34:00
素直に型を限定すればいいのに

717:デフォルトの名無しさん
07/07/05 21:55:47
int型の数字を文字列に変換するのってどうやるん?
具体的に言うと
int n = 34;
char* nStr = intToStr( n ); /* nStr = "34" */
という風にしたいのだけれど。

718:デフォルトの名無しさん
07/07/05 22:03:14
char *buf;
int n=34;
buf=メモリ確保
ssprintf(buf,"%d",n);

719:デフォルトの名無しさん
07/07/05 22:05:12
>>717
sが一個多かった
sprintf


720:デフォルトの名無しさん
07/07/05 22:35:49
>>718
サンキュ!
inline char* int2str( int n )
{
char *buffer;
buffer = malloc( sizeof( char ) );
sprintf( buffer, "%d", n );
return buffer != NULL ?
buffer:
"FAULT!!";
}
一応こういう感じで。

721:デフォルトの名無しさん
07/07/05 22:43:17
>>720
>buffer = malloc( sizeof( char ) );
1バイトしか確保できないよ
'\0'しか格納できない
もう少し多めに確保して
>return buffer != NULL ? buffer:"FAULT!!";
buffer の確保が失敗した場合 sprintf( buffer, "%d", n ); でエラーが出る
buffer = malloc( sizeof( char ) );
if(buffer){
sprintf( buffer, "%d", n );
return buffer;
}
else {
return "FAULT!!";
}
のほうがいい気がする

722:デフォルトの名無しさん
07/07/05 22:57:49
>>721
せっかくならmallocも直してやれよw
11桁くらい確保すれば十分の気がする

723:デフォルトの名無しさん
07/07/05 23:16:28
>>720
んじゃ buffer = malloc(sizeof( char ) *12);
または buffer = malloc(12);

>>722
符号付の場合、'\0'いれると12文字になる

724:デフォルトの名無しさん
07/07/05 23:40:25

最強の関数教えてください


725:デフォルトの名無しさん
07/07/05 23:42:07
VIPでやれ

726:デフォルトの名無しさん
07/07/05 23:42:25
どう考えても main だろ。

727:デフォルトの名無しさん
07/07/05 23:43:51
>>724
abort

728:デフォルトの名無しさん
07/07/05 23:49:33
exit

729:デフォルトの名無しさん
07/07/06 01:35:39
buffer = (char*)malloc(sizeof( char ) *12);
        ↑これは?

730:デフォルトの名無しさん
07/07/06 01:36:56
bufferの型にあわせてあるんだろ。
C++じゃ必須の書き方だがCじゃいらん。

731:デフォルトの名無しさん
07/07/06 01:47:14
CとかC++の問題じゃねーだろ・・・知ったかの初心者がレスしてんのか、ここは?
キャスト演算子とか知ってなさそうだな・・・平気で型の違う変数をキャスト演算子なしで
代入しちゃうようなヘボプログラマーかw

732:デフォルトの名無しさん
07/07/06 01:48:12
配列の添え字に変数を指定することは可能でしょうか?


733:デフォルトの名無しさん
07/07/06 01:54:01
コンパイラが自動的にやってくれるのを当てにして失敗するプログラマー(プ

734:デフォルトの名無しさん
07/07/06 01:56:50
>>730 (・∀・)ニヤニヤ
> bufferの型にあわせてあるんだろ。
> C++じゃ必須の書き方だがCじゃいらん。

735:732
07/07/06 01:57:25
自己解決しました
可能っぽいですね

736:デフォルトの名無しさん
07/07/06 02:01:26
>>730 (・∀・)y-~~~ ヤニヤニ

737:デフォルトの名無しさん
07/07/06 02:01:26
C だと void* から別のポインタ型への変換は暗黙にできるだろ・・・常識的に考えて。

738:デフォルトの名無しさん
07/07/06 02:04:22
void*が無かった頃のCならmallocはchar*を返したから
キャストしないと警告もんだとか言い出してみる。

739:デフォルトの名無しさん
07/07/06 02:04:47
>>730 (・∀・)ニヤニヤ ヘボプログラマー必死だな

740:デフォルトの名無しさん
07/07/06 02:08:16
>>738
malloc で気を使っても、
どっかで void* 使ってたらそれだけでアウツだけどな。
その環境なら。

741:732 ◆L/nntMgEC6
07/07/06 02:11:36
>>735
可能なんですか?

742:デフォルトの名無しさん
07/07/06 02:12:01
>>730 (・∀・)ニヤニヤ あるんだろ。Cじゃいらん。

743:デフォルトの名無しさん
07/07/06 02:24:21
>>738 (・∀・)ニヤニヤ
> void*が無かった頃のCなら

744:デフォルトの名無しさん
07/07/06 02:27:29
>>732
char a[10];
int i;

でa[i]ってことですか?
もちろん可能。

添え字は整数の値をとる式ならなんでもおkだぞ。

745:デフォルトの名無しさん
07/07/06 02:29:22
>>744 (・∀・)ニヤニヤ
> 添え字は整数の値をとる式ならなんでもおkだぞ。

(VIPPERのAA略)<常識的に考えて配列の要素番号の範囲内だろ

746:デフォルトの名無しさん
07/07/06 02:33:49
アホが常駐しとるな

747:744
07/07/06 02:34:12
>>745
おまい!大丈夫か!
>>732は文法的に許されるかと質問しているんだろ!

748:デフォルトの名無しさん
07/07/06 02:34:50
よい子がC言語の勉強実況してるからみてやろうぜ
WMPのファイル→URLを開く→URLリンク(matoinu.orz.hm:30000)<)

面白いぜwwwwww



749:デフォルトの名無しさん
07/07/06 02:38:25
範囲外まで指定できちゃうのがエラーの温床になってるしな。

750:デフォルトの名無しさん
07/07/06 02:40:29
とりあえず (・∀・)ニヤニヤ を NG にした。

751:732 ◆L/nntMgEC6
07/07/06 02:42:37
>>744さん
回答有難う御座います。

int i;
char a[]="abc";
i=strlen(a);
char b[i];

のような感じで使いたいのですが、可能でしょうか?

752:デフォルトの名無しさん
07/07/06 02:44:57
>>747 (・∀・)ニヤニヤ 適切と不適切がわからないプログラマーワロスw
キャストは不要でつか~~~?

753:デフォルトの名無しさん
07/07/06 02:46:39
746 名前:デフォルトの名無しさん 投稿日:2007/07/06(金) 02:33:49
アホが常駐しとるな

(VIPPERのAA略) < 常識的に考えて知ったかぶって初心者にありもしないことを言う方がおかしいだろ
どう考えて配列を適切に参照できる、要素番号の範囲内の値をとる式ならって話ならわかるけどw

754:デフォルトの名無しさん
07/07/06 02:48:03
とりあえず (VIPPERのAA略) を NG にした

755:デフォルトの名無しさん
07/07/06 02:49:35
>>744 (^∀^) ニタニタ
> 添え字は整数の値をとる式ならなんでもおkだぞ。
整数の値をとる式ならなんでも 整数の値をとる式ならなんでも
こやつは要素数と参照できる範囲外の値をとってもおkなんだぞぉーーー!

756:デフォルトの名無しさん
07/07/06 02:50:28
>>744 m9(^д^)9m プププ、(ダブル)プギャー

757:デフォルトの名無しさん
07/07/06 02:53:33
文体変えてAA使っても、いつものアホだってことはバレバレ

758:デフォルトの名無しさん
07/07/06 02:53:52
>>754
all right, I will use AA that's not for short.

759:デフォルトの名無しさん
07/07/06 02:54:34
>>757
> いつものアホ
アホとか言っちゃってるよぉ~~~、お前がアホのくせして初心者に大嘘教えているくせにw
お前みたいな奴にアホ言われたくね~~なぁ。俺は間違ってねーし。お前は不適切。

760:デフォルトの名無しさん
07/07/06 02:56:01
VIPPER の AA 略 < 常識的に考えて、文法的におkってことを持ち出して
不十分な(というか間違っている)説明の言い訳をするかぁ?
んじゃお前は a[10] の配列の10番目を参照するときは a[10] とでもやってろよ

761:デフォルトの名無しさん
07/07/06 02:56:21
>>751
それはダメ。
配列変数の宣言文には変数は使えない。
それをするなら

nt i;
char a[]="abc";
char *b;
i=strlen(a);
b=(char*)malloc(sizeof(char)*i);

762:デフォルトの名無しさん
07/07/06 02:56:51
>>751
int i;
char a[]="abc";
char *b;
i=strlen(a);
b = (char*)malloc(sizeof(char)*i);

free(b);

スレの流れからすればこんな感じ
bにaと同じ長さの文字列を入れるなら+1しないと駄目だけど。

763:732 ◆L/nntMgEC6
07/07/06 02:58:25
>>761さん
有難う御座います。おかげで疑問が解けました。

764:デフォルトの名無しさん
07/07/06 03:00:43
 |    ( ●)(●)   いい加減な説明をしていることを指摘されて
. |     (__人__)   指摘した相手をアホとか言う方がアホだろ
  |     ` ⌒´ノ   常識的に考えて・・・

765:デフォルトの名無しさん
07/07/06 03:01:22
>>761
C99ならできるというのは禁句かい?

766:デフォルトの名無しさん
07/07/06 03:03:23
回答者が書く補足としては、ありだとおもう。
突っ込みとしては、ちょっと弱い。

767:デフォルトの名無しさん
07/07/06 03:04:15
 / ノ  ⌒ \  文法的にも間違っていることを言う奴が
 |  (●)(●) |  間違っていない奴にアホって言うアホだろ
. |  (__人__)  | 常識的に考えて。ちゃんとキャストしろよ

768:デフォルトの名無しさん
07/07/06 03:05:15
常考常考うるせーよ

貶し合ってないで意味のある話をしろ

769:デフォルトの名無しさん
07/07/06 03:08:42
>>763
VBだとそれができるんだよね。

それはVBなどのインタープリター言語は実行時に変数宣言文も実行文もおなじように上から処理してゆくから。

Cのようなコンパイラ言語はコンパイル時に変数宣言文を処理してゆく。
だからコンパイル時に配列変数のサイズがわかっていないと処理ができない。

JavaもVBと同じだと思う。

770:デフォルトの名無しさん
07/07/06 03:09:22
ここは初心者が鼻息を荒くして入門書読みながらレスしてるのが多くて注意が必要

771:デフォルトの名無しさん
07/07/06 03:09:45
>>765
C99ならできるの?

772:デフォルトの名無しさん
07/07/06 03:10:54
 |    ( ●)(●)   お前みたいな奴は、たとえドラマの役者として
. |     (__人__)   起用されても、まともなキャスティングもされずに
  |     ` ⌒´ノ   脇役かエキストラに決まってんじゃん>アホ言うたアホ

773:デフォルトの名無しさん
07/07/06 03:12:15
AA厨も早く寝ろ
今日はお開きだ

774:デフォルトの名無しさん
07/07/06 03:15:42
>>773 (・∀・)キャスキャス

775:デフォルトの名無しさん
07/07/06 03:17:05
いまさらやらない夫のAA貼り付けて喜んでんのかよw

776:デフォルトの名無しさん
07/07/06 03:27:41
>>771
余裕

777:デフォルトの名無しさん
07/07/06 03:27:46
いまさら やらない か?っつか、いまさらキャストも適切に出来ない奴が
初心者相手にいい加減な説明、笑えねぇ~~~~~。お前、指導者に向いてねーよ。

778:デフォルトの名無しさん
07/07/06 04:13:51
キャストすると型によってアドレスが変わるプロセッサの話をすると、へんなのを召喚しちゃいますか?

779:デフォルトの名無しさん
07/07/06 04:41:39
それがどうかしたのか?
printf に渡すときの話とはわけが違うぞ?

780:デフォルトの名無しさん
07/07/06 06:14:06
1バイト文字と2バイト文字が混在してる文字列を
ループ使って1バイトずつputchar()で画面に表示しても
ちゃんとどちらも表示されるのは、シェルやプロンプトの方で
何バイト文字か確認して1バイト文字じゃない時は
一度バッファに溜める、とかしてるからですか?

781:デフォルトの名無しさん
07/07/06 06:21:01
ものによるとしか

782:780
07/07/06 06:49:14
>>781
例えばどうやって処理してるんですか?

783:デフォルトの名無しさん
07/07/06 07:35:00
>>780
いいえ、シェルプログラムはそんなことはしません。

784:780
07/07/06 07:52:43
>>783
あ、コンパイラがやってくれてるんですか?

785:デフォルトの名無しさん
07/07/06 08:09:19
>>784
いいえ、勿論コンパイラの知ったこっちゃありません。

もしかしたら、画面表示はシェルプログラムがやっていると思っているんですか?
例えば他のPCにリモートログインしたときには相手先のシェルプログラムが動くわけですが、
そのシェルプログラムが自分の使っているPCの画面を直接アクセスするなんて夢でも見ているんですか?

786:デフォルトの名無しさん
07/07/06 08:23:14
>>780
マルチバイト文字などに関係なく、標準入出力は
行単位バッファリングされていることが多い。

バッファリングなしにしても、まあ正しいマルチバイト文字列になった時点で
正しく表示されると仮定していいと思う。

787:780
07/07/06 08:24:22
>>785
ということはOSの画面表示を担当するプログラムが
putchar()で2バイト文字の一部を出力しようとした時に
2バイト文字の一部だと判断し表示を一時中断して
次に送られてくるputcharの引数と組み合わせて
それに対応する2バイト文字を出力していているんでしょうか?

788:デフォルトの名無しさん
07/07/06 08:26:31
2バイト文字で、1バイト目単体で文字としてなりたっているようなのってなんかあったっけ?

789:デフォルトの名無しさん
07/07/06 08:28:46
>>788
iso-2022-jpの1バイト目はASCII文字と同じコード。

790:780
07/07/06 08:30:47
>>786
行単位でバッファリングするんですね
それで予め2バイト文字があるかないか調べるわけですか、なるほど

791:デフォルトの名無しさん
07/07/06 08:39:37
>>789
Shift_JISしか考えてなかった。参考になった
ありがとう

792:デフォルトの名無しさん
07/07/06 08:41:44
文字コードの体系もしっかり管理しときゃ良い。

793:デフォルトの名無しさん
07/07/06 09:11:21
型で区別するんじゃない?
char型ならその分のデータを受け取るまで待つ

794:デフォルトの名無しさん
07/07/06 09:18:02
ASCIIコード体系でなければ左へ受け流すぅ~

795:デフォルトの名無しさん
07/07/06 11:50:43
1: 3.2 2.6 3.4 2.1 5.2 3.4 5.2
2.4 4.2 4.1 0.2 4.2 5.3

2: 3.2 2.4 3.4 2.2 5.2 3.4 5.2
2.4 4.2 4.3 0.2 4.2 5.3

3: 3.1 2.6 3.4 2.1 6.2 3.4 5.2
2.4 4.2 4.0 0.2 4.2 5.3

っていうデータがあるとして
10個目(つまり4.3 4.1 ,4.0)だけを抜き出すプログラムをつくれといわれると
float型でやりますか?char型でやりますか?

796:デフォルトの名無しさん
07/07/06 12:26:17
「作れ」っつった本人に仕様を確認する。

797:デフォルトの名無しさん
07/07/06 13:03:17
とりあえず float は使わない。
使うなら double 。

798:デフォルトの名無しさん
07/07/06 13:51:36
つーか、計算もしないし区切りもはっきりしてるなら
文字列のままで通しちゃったほうがいいべ

799:デフォルトの名無しさん
07/07/06 14:01:23
>>793
それはない。そんなことしたら、ファイルにリダイレクトできない。

>>791
iso-2022-jpの場合、KanjiInが来た後は2バイト文字、そうでなければAsciiという分け方。
だから2バイト文字の後にKanjiOutが来ないと文字化けする。

>>790
バッファリングはするかもしれないが、出力の判断とは直接的には無縁。
でなければエスケープシーケンスでの制御ができない。

800:デフォルトの名無しさん
07/07/06 15:41:47
>>799
>KanjiInが来た後は
>KanjiOutが来ないと
そんなコード/シーケンスはありません。

801:デフォルトの名無しさん
07/07/06 18:09:25
Windows2000で作られたソフトはWindowsXPではうまく動作しないことが
あるのですか。LSI C-86を使ってC言語を学ぶという趣旨の本を5年前に
買ったのを今になって勉強しようとしてインストールしたという次第です。
最初のコマンドプロンプトがC:\>になるはずのところ、C:Documents and
Settings□□>となりエラーと表示されました。□□は、再起動時に
アカウント指定を要求され、自分の名前を入れたものです。
別な場所へインストールすればよいのですか。よろしくお願いします。

802:デフォルトの名無しさん
07/07/06 18:15:05
>>801
LSI-C86は遺物なので、特殊性を理解できていないなら使ってはいけない。
MSのVisualStudioでもgccでも、無料で手に入るほかのコンパイラを使うことをお勧めする。

803:デフォルトの名無しさん
07/07/06 18:18:59
まあコマンドプロンプトをC:\>にしたいなら、cd \ でいいけどな。
本と同じになるだけで、役には立たないだろうけど。

804:デフォルトの名無しさん
07/07/06 18:26:59
>802 responseありがとうございます。早速入手しようと思います。

805:デフォルトの名無しさん
07/07/06 18:43:58
ソーカcd¥-enterで続けられるのか。

806:デフォルトの名無しさん
07/07/06 18:59:38
>>800 の意図が気になる。

807:デフォルトの名無しさん
07/07/06 19:03:18
>>804
たぶん電子メールのレスと2ちゃんのレスは同じ意味を持ってると思うんだが、
だとしたら君が使ってるresponseはレスという意味とは違うぞ

808:デフォルトの名無しさん
07/07/06 19:06:00
>>807
URLリンク(ja.wikipedia.org)

809:デフォルトの名無しさん
07/07/06 19:37:26
nullponceというのを提案しまnce

810:723
07/07/06 19:39:17
>>729
忘れてた

811:デフォルトの名無しさん
07/07/06 19:43:03
英語版ウィキペには

Reply. Its abbreviation followed by colon (Re:) is prepended to e-mail subject lines when answering a received message

って書いてるんだよな。
まあ、スレ違いだからどうでもいいが。

812:デフォルトの名無しさん
07/07/06 20:22:37
A)入力装置に関する記述のうち,適切なものはどれか。
1 ジョイスティックは,画面上に透明なセンサを取り付けたものであり,画面に指などを押し付けて座標を指示する。
2 タブレットは,ペンのような装置と板状の装置を組み合わせた入力機器であり,ペンのような装置を押し付けて座標を指示する。
3 ディジタイザは,人間のもつ静電気を利用して指の位置を検出するポインティングデバイスであり,操作面を指して座標を指示する。
4 トラックパッドは,球の一部分が装置の上面に出ているポインティングデバイスであり,球を指で直接回転させて,その変化量で座標を指示する。

すみません、質問なのですが今上の問題がハードウエアの組み込みの
参考書の問題がわかりませんので、教えてはいただけないでしょうか?

813:デフォルトの名無しさん
07/07/06 20:25:09
>>812
2

814:デフォルトの名無しさん
07/07/06 20:26:34

1はジョイスティックの説明ではない事は明らかだから×
2は正しいと思うから○
3は知らんから知らん
4はトラックパッドじゃなくてトラックボールの説明だから×

815:デフォルトの名無しさん
07/07/06 20:29:48
ありがとうございました。

これで先に行けます。

816:デフォルトの名無しさん
07/07/06 20:32:06
制御系といえば、C言語だけど
Cのすごい所って何?

817:デフォルトの名無しさん
07/07/06 20:38:01
体にぴったり張り付くスク水の用に、ハードウェアに貼り付ける所

818:デフォルトの名無しさん
07/07/06 20:38:40
>>816
おまえの方がすごいと思う。

819:デフォルトの名無しさん
07/07/06 20:38:58
3はタッチセンサとか、タッチスクリーンとか言われている物のうちの1種だね

820:デフォルトの名無しさん
07/07/06 20:41:36
>>812
3の説明がトラックパッドっぽいな

821:デフォルトの名無しさん
07/07/06 20:42:36
C言語にできることは、C++にもできるって聞いたんだけど、
C++も体にぴったり張り付くスク水のように、
ハードウェアに貼りつけるの??

822:デフォルトの名無しさん
07/07/06 20:43:22
Cと同じようにできる。

823:デフォルトの名無しさん
07/07/06 20:44:46
C++もC言語と同じように最強ならば、
C++も制御系によく使われるの?
それともC++はオープン系(WEB系も含む)?

824:デフォルトの名無しさん
07/07/06 20:47:10
質問です。年月日を入力してツェラーの公式を利用して曜日を表示するプログラム
をつくりたいんですけど、BCCでコンパイルしたら公式のところでエラー
「浮動小数点の不正な使用」ってでるんですけど、どうしてだかわかりますかね?
#include <stdio.h>

int main(void){
int year,month,day;
char youbi[7][10]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
int i;

printf("Year?");
scanf("%d",&year);
printf("Month?");
scanf("%d",&month);
printf("Day?");
scanf("%d",&day);

i=(year + (year/4) - (year/100) + (year/400) + (2.6*month +1.6) + day)%7;
printf("It's %s.",youbi[i]);
return 0;
}

825:デフォルトの名無しさん
07/07/06 20:49:26
>>821
C++の場合スク水フェチのオジサンが自分で着る用に作ったものもあるので注意

826:デフォルトの名無しさん
07/07/06 20:56:27
>>824
(2.6*month +1.6)を(int)(2.6*month +1.6)にしろ。
ここが整数でないから、%の左側全体が整数型でなくなっている。
剰余演算子は浮動小数点数を演算対象にできないので、件のエラーになる。

827:デフォルトの名無しさん
07/07/06 20:57:13
>>823
Cが制御系で使われるのは「最強」だからではなく「高級アセンブラ」だから。
C++も制御系で使われるよ。C++として使われるかはともかく。

つか、最強ってなんだよ。

828:デフォルトの名無しさん
07/07/06 20:58:38
>>824
剰余演算子%というオペランドは整数同士でないとダメ

演算してる行の型がごっちゃになってるから明示的にキャストしたり読みやすくすべき
基本的にコメント文とかで説明もなしに実数を整数に叩き込んだりしちゃだめ

829:デフォルトの名無しさん
07/07/06 21:19:14
なるほど。できました、ありがとうございます。

830:デフォルトの名無しさん
07/07/06 21:30:26
スレ違いかもだけど、ここの人達他のスレより頼りになりそうなので。。。
基本情報の午後問をCで受かりたいのですが、なんの本を読めばいいですか?
当方、C言語はよくわかりません。COBOLは少しできます。
ただCで受けたいのです。

831:デフォルトの名無しさん
07/07/06 21:32:10
>>830
試験は慣れたものでやるべき

832:デフォルトの名無しさん
07/07/06 21:58:20
>>830
アセンブラがオススメ
例年一番簡単

833:デフォルトの名無しさん
07/07/06 21:59:06
C言語ってeclipceかbolandか、
それともvisual basic かどれでやればいいですか?

834:デフォルトの名無しさん
07/07/06 22:04:13
その質問おもしろい?

835:デフォルトの名無しさん
07/07/06 22:10:25
visual studioだっけ?

836:デフォルトの名無しさん
07/07/06 22:12:46
>>833
Linuxでもできるよ。

837:デフォルトの名無しさん
07/07/06 22:14:19
整数型配列は
int iarray[10];
memset(iarray, 0, sizeof(array));
ですべて0で初期化できると知ったのですが、

実数型配列を
double darray[10];
memset(darray, 0.0, sizeof(array));
のように初期化してもかまいませんか?
つまり実数型配列の全ての要素を0.0にしたいのです

838:デフォルトの名無しさん
07/07/06 22:16:31
>>837
いいんじゃね?
DirectXとか、そういう方法で、実数やらポインタやらバリバリクリアしてたな。
移植性は無くなる。

839:デフォルトの名無しさん
07/07/06 22:17:55
> memset(darray, 0.0, sizeof(array)); 

あ、これは、警告かエラーになるな。
sizeof のところはミスだよね?


840:デフォルトの名無しさん
07/07/06 22:19:54
>>837
ANSI/ISO Cへの移植性を望むなら避けるべき。
浮動小数点数がIEEE 754に則っていることを仮定してよいなら構わない。

841:デフォルトの名無しさん
07/07/06 22:21:17
>>833
ほとんどにアルゴリズムの問題
ポケコンのCインタプリタでおk

842:デフォルトの名無しさん
07/07/06 22:26:29
>>839
あと、0.0 は 0 だな。

843:デフォルトの名無しさん
07/07/06 22:27:49
>>839
すみません sizeof(darray) です
あとmanページでmenset関数を調べてみると
#include <string.h>
void *memset(void *buf, int ch, size_t n);
となっていたので
int ch に0.0と渡してもだめなんですね

ということは関数の仕様上は
memset(darray, 0, sizeof(darray));
と書くのが正しくて、
しかもCコンパイラの浮動小数点がIEEE754前提での使い方なので

結局は配列の要素数の分だけループで回して初期化するのが
一番いちゃもん言われにくいということでよろしいでしょうか?
ありがとうございました

844:デフォルトの名無しさん
07/07/06 22:29:23
エクセス64で 0 ってどうなるの?


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch