C言語なら俺に聞け( ..
[2ch|▼Menu]
586:デフォルトの名無しさん
06/06/29 20:19:49
コマンドプロンプト上でカーソル位置を自由に設定する方法を教えてください。
メニュー画面を作って、メニュー番号を入力させるプログラムを作りたいの
ですが、メニュー画面を表示させることはできるのですが、
画面上の真ん中あたりに、メニュー番号を入力させるところを作りたいのですが、
そこに、カーソルをもってくるにはどうしたらいいですか?
お願いします。

587:デフォルトの名無しさん
06/06/29 20:48:22
コンソールAPI でぐぐる。

588:586
06/06/29 21:01:06
>>587
ありがとう!!

589:586
06/06/29 22:12:54
ごめんなさい、やっぱわかんなかった。
VCじゃなくって、まったくのc言語だけでカーソル移動とかさせたいのだけど、
windows.hとか使わないでやる方法教えてください。

590:デフォルトの名無しさん
06/06/29 22:17:07
>>589
ない。
そもそも、標準Cにコンソールとか言う概念自体がない。

591:586
06/06/29 22:21:42
>>590
そうなのか、、ありがと

592:デフォルトの名無しさん
06/06/30 01:03:38
すげぇなぁ。
>メニュー画面を作って、
>メニュー番号を入力させるプログラムを作りたいのですが、
>メニュー画面を表示させることはできるのですが、
>画面上の真ん中あたりに、
>メニュー番号を入力させるところを作りたいのですが、
>そこに、
>カーソルをもってくるにはどうしたらいいですか?
なげぇ文だぜ。
きっとプログラムもmain()で冗長に書いているのだろう。

593:デフォルトの名無しさん
06/06/30 16:42:41
文字列の部分コピーをやりたいです。
先頭から n 文字目までのコピーなら strncpy(*char, *const char, int); で実現できますが、
n 文字目から最後までのコピーは、char配列の1成分ずつfor文等でコピーしないといけないのでしょうか?

594:デフォルトの名無しさん
06/06/30 17:43:09
>>593
strcpy(dst, src+n);

595:593
06/06/30 18:38:32
>>594
できました。ありがとうございます。
このような使い方が出来るとは・・・覚えておきます。

596:デフォルトの名無しさん
06/06/30 19:05:37
>>595
ポインタとヌル終端文字列の基本テクです

597:デフォルトの名無しさん
06/06/30 22:56:30
do-while文で、整数を入力して、0になったらおわりという文はどうしたらいいのですか?最近プログラムの勉強始めたばかりで申し訳ありません

598:デフォルトの名無しさん
06/06/30 23:19:56
>>597 適当に答えてみる
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int num;
char tmp[256];
do{
num=atoi(gets(tmp));
}while(num!=0);
return 0;
}

599:582
06/07/01 00:25:26
>>583,584,585
ありがとうございます。system("PAUSE");を利用することにしました。

>>597
#include <stdio.h>
int main(){
int n;

do{
scanf("%d",&n)
if(n<1) printf("1以上の整数を代入してください!");
}while(n<1);

do{
n--;
}while(n!=0);

return(0);
}

実行してないからバグあるかもしらん。


600:デフォルトの名無しさん
06/07/01 01:04:31
598、599さん、素早い返答ありがとうございます。実は猫でもわかるシリーズの本にあった例で、do〜while(n)で終わってて理解できなかったんです。初学者ゆえこれからも質問しますが、よろしくお願いいたしますm(__)m。

601:デフォルトの名無しさん
06/07/02 13:57:54
double a=123456.6789
b=-12345.6789

printf("a=%10.4f b=%10.4f\n",a,b);
printf("a=%7.4f b=%7.4f\n"),a,b);

の結果が両方とも

a=123456.6789 b=-12345.6789になるのはどうしてでしょうか?

602:・∀・)っ-○◎● ◆toBASh....
06/07/02 14:07:24
>>601
%10.4fは、浮動小数の「小数点以上」ではなく「全体の幅」を10文字で表すと言う意味。
もちろん小数点以上の桁数が足りない場合は自動的に補われる。
小数点以下の「4」の部分は、小数点以下に使う桁数の指定。

どっちも7文字でも10文字でも表しきれないので11文字に拡張されて同じ表示になる。

603:デフォルトの名無しさん
06/07/02 14:15:07
>>601
スレリンク(tech板:671番)

604:デフォルトの名無しさん
06/07/02 14:15:33
>>602
よくわかりました。ありがとうございます。

605:デフォルトの名無しさん
06/07/02 14:30:09
目がおかしくなったかなぁ。
>601の後者はコンパイルさえ通らないし、二番目の%10.4fの結果は12桁になるようにしか見えない。

606:デフォルトの名無しさん
06/07/02 16:02:02
Boland C++ Compiler 5.5でアプリケーションプログラムをコンパイルする方法を
教えてください。

パラメータ 'hWnd'は一度も使用されない
パラメータ 'hPrevInstance'は一度も使用されない
パラメータ 'lpCmdLine'は一度も使用されない

といった警告はどうしたら消えるのでしょうか?

607:・∀・)っ-○◎● ◆toBASh....
06/07/02 16:09:20

int WINAPI WinMain(
HINSTANCE /* hInstance */
, HINSTANCE /* hPrevInstance */
, LPSTR /* lpCmdLine */
, int /* iCmdShow */
)
{
 // ほげほげ
}

608:デフォルトの名無しさん
06/07/02 16:36:34
その気持ちの悪いカンマの位置はどんなメリットがあるんだ?
たまに見かけるんだが。

609:デフォルトの名無しさん
06/07/02 17:50:20
Borland Developer Studio 2006 No.06
スレリンク(tech板)l50


int WINAPI WinMain(
 HINSTANCE,
 HINSTANCE,
 LPSTR,
 int,
)
{
 // ほげほげ
};
ってやっちまって、コンパイルエラー出て悩むのを防ぐ馬鹿除けでは?

610:デフォルトの名無しさん
06/07/02 18:10:34
俺ならint WINAPI WinMain(HINSTANCE, HINSTANCE, PSTR, int)って1行に書く。

611:デフォルトの名無しさん
06/07/02 18:11:34
一応言っておくと>>607-610のように仮引数名を省略できるのはC++だけで、Cではできない。

612:デフォルトの名無しさん
06/07/02 18:40:04
あれ? C99でできなかったっけ?

613:デフォルトの名無しさん
06/07/02 18:47:37
nに入力した数字の数だけ$を表示するプログラムを作ったんですが
数字を入力するとなんか沢山$が出てきちゃいます。
改善方法はありませんか。よろしくお願いします。
#include <stdio.h>
int main(void){
int a;
char c;
while(1){
printf("C=");
scanf("%c",&c);
if(c==0)
break;
if((c <= 'A' && c <= 'Z') || (c <= 'a' && c <= 'z')){
printf("英数字ですぅ\n");
continue;
}
else{
for(a=1;a<=c;a++)
printf("$");
}
  }
}

614:デフォルトの名無しさん
06/07/02 19:58:25
>>613
・scanf()の戻り値をチェックしないとcの値が有効かどうか判らない。
・cには文字が入っている。それは数値ではないので0と比較する意味が殆どない。
・同じ理由で、$の数は文字コードの値に依存してしまう。

やりたいことがよく判らんが、入力と処理を分けて考えた方がいいんじゃないか?

615:デフォルトの名無しさん
06/07/02 20:54:59
 cを入力
  ↓
英字か?no→→→数字か?no→→→→→それ以外
 yes↓     yes↓         ↓
上に戻る  cの数だけ$を表示    終了

616:デフォルトの名無しさん
06/07/02 21:01:46
上のようなプログラムを作りたかったんですが
10進数型で入力にして
if((c <= 'A' && c <= 'Z') || (c <= 'a' && c <= 'z')){
printf("英数字ですぅ\n");

else if((c <= 0){
for(a=1;a<=c;a++)
printf("$");
}

else
break;

このようにしても英字を入力したらダメですし・・・。
上のようなプログラムを作るのは無理ですか。

617:デフォルトの名無しさん
06/07/02 21:05:30
>>616
つ isalpha(), isdigit()

618:デフォルトの名無しさん
06/07/02 21:05:51
>>616
>>616読め

619:デフォルトの名無しさん
06/07/02 21:13:22
cが0以下ってのはどういう事よ

620:デフォルトの名無しさん
06/07/02 21:44:18
signed char であれば、ASCII範囲外を除外しているといえなくも無い。

621:デフォルトの名無しさん
06/07/02 21:48:38
ASCII範囲内を除外しているように見えるが...

622:デフォルトの名無しさん
06/07/02 22:17:10
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
// ここから入力
char buf[200];
if (fgets(buf, sizeof(buf), stdin) == NULL) {
// 入力終端or異常
}
char * ptr;
long foo = strtol(buf, & ptr, 10);
if (ptr[0] != '\0') {
// 数字以外の入力
}
// ここから文字処理
for (unsigned ic = 0; ic < foo; ++ic) {
putchar('$');
}
return 0;
}



623:デフォルトの名無しさん
06/07/02 22:40:48
見たことのない文字がいっぱい・・・。
c言語って難しいですね。
あと、616は間違いだらけでした・・・。
皆さんありがございました。皆さんが言ってることが理解できるようにもっと勉強します。

624:デフォルトの名無しさん
06/07/02 22:45:12
>見たことのない文字がいっぱい・・・。
確かにそれでは文字コードの処理は難しいだろう
…とかいうツッコミは置いといて、
ガンガレ。

625:デフォルトの名無しさん
06/07/02 22:55:52
>>622
改行を除去するか、'\0' || '\n'で判定しないと、
常に数字以外と判定されるよ。

626:622
06/07/02 23:36:30
あ、いけね、忘れてた。
>>625
THX!
こんなもんかな。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char buf[200];
if (fgets(buf, sizeof(buf), stdin) == NULL) {
printf("No input.\n");
return 0;
}
char * ptr = strchr(buf, '\n');
if (ptr) {
* ptr = '\0';
}
if (strlen(buf) == 0) {
printf("Empty input.\n");
return 0;
}
long foo = strtol(buf, & ptr, 10);
if (ptr[0] != '\0') {
printf("Not a number.\n");
return 0;
}
for (unsigned ic = 0; ic < foo; ++ic) {
putchar('$');
}
return 0;
}

627:デフォルトの名無しさん
06/07/02 23:36:32
初歩的な質問ですみません。
main関数とは別のファイルに作ったユーザー定義関数を
呼び出すのはどうしたらいいですか?
#includeで取り込めばいいのでしょうか?
そのときは、やっぱり関数のプロトタイプ宣言は必要ですか?

628:デフォルトの名無しさん
06/07/02 23:37:57
extern付けて宣言する必要がある

629:デフォルトの名無しさん
06/07/02 23:38:16 BE:314515679-#
>>627
環境は?

630:デフォルトの名無しさん
06/07/02 23:39:01
>>629
WindowsXPです

631:デフォルトの名無しさん
06/07/02 23:42:36 BE:239631168-#
>>630
VCとかなら、プロジェクトに別ファイルを追加すればいいよ。
コマンドラインなら、引数で、mainのファイルと、別のファイルを渡せば勝手にリンクされる。

632:デフォルトの名無しさん
06/07/02 23:44:39
すごく初歩的なんですが
c言語を学校で習ってるんですが
家のPCでソース組むにはどうしたらいいでしょうか?

633:デフォルトの名無しさん
06/07/02 23:46:01
答え:先生に聞く

はい次の方どうぞー

634:デフォルトの名無しさん
06/07/02 23:47:57 BE:359446098-#
>>632
メモ帳

635:デフォルトの名無しさん
06/07/02 23:48:54
コンパイラがどれがいいのかわからなんです・・・・

636:・∀・)っ-○◎● ◆toBASh....
06/07/02 23:49:08
コンパイルまでやるなら
Visual C++ Express

637:デフォルトの名無しさん
06/07/02 23:52:17
学校じゃコマンドプロンプトでlcc ソース名でコンパイルできるんですが

638:・∀・)っ-○◎● ◆toBASh....
06/07/02 23:55:23
Visual C++ Expressならコマンドプロンプトから cl ソース名 でおk

639:デフォルトの名無しさん
06/07/02 23:59:08
>>632
コマンドプロンプトでnotepad[Enter]だ。

640:デフォルトの名無しさん
06/07/02 23:59:45
URLリンク(www.borland.com)
URLリンク(www.vector.co.jp)
VC++ Expはダウソに時間が掛かるから、今すぐちゃちゃっとやるならこっつで

641:・∀・)っ-○◎● ◆toBASh....
06/07/03 00:05:42
lcc-win32も自分で環境変数通せばコマンドラインで使えそうだけどな

642:デフォルトの名無しさん
06/07/03 01:23:42
>>637
lccと言えば、LSI C-86のような気がする。
準備(インストール)はなれないと面倒かもしれないが、学校と同じというのは利点かもしれない。

643:デフォルトの名無しさん
06/07/03 02:02:18
4つ程度なら、int WINAPI WinMain(HINSTANCE, HINSTANCE, PSTR, int)って1行でもいいけど、世の中にはもっといっぱい受け渡す関数もあるよ。

今更、lccって気もするなあ。
実務経験的に、gccかVCのインスコと環境構築方法も学習すべき。

644:デフォルトの名無しさん
06/07/03 07:34:30
lccと言ってもLSI-Cではないと思うけどね。
授業でLSI-C使っているならそれはそれで、よっぽど阿呆で楽しいが。

645:仕様書無しさん
06/07/03 13:16:25
配列でhoge[i*j]と*(hoge+i*j)はどちらがいいのでしょうか?
メリットなどがあれば教えてください

見やすいのはhoge[i*j]なのでこっちで書くほうが多いのですが



646:デフォルトの名無しさん
06/07/03 13:34:54
>>645
a[i] は *(a + i) の略記法なんだからコンパイラにとってはどっちでも同じ。
見やすい方で書けばいい。

647:デフォルトの名無しさん
06/07/03 15:55:19
pow()や、malloc()は重い関数と聞いたのですが、
ではclock()は重い関数なのでしょうか。
というか、重い関数というのはどこでどうやって知るのでしょうか?


648:デフォルトの名無しさん
06/07/03 15:58:51
>>647
OSのソースを読むとか実際に測定してみるとか。


649:デフォルトの名無しさん
06/07/03 16:06:47
>>648
ということは重いかどうかというのは環境依存なんですね。
分かりました。どうもありがとうございます。

650:デフォルトの名無しさん
06/07/03 18:46:45
>>647
>というか、重い関数というのはどこでどうやって知るのでしょうか?
というか、重い関数というのは何を基準に決めるのでしょうか?

651:デフォルトの名無しさん
06/07/03 19:14:34
主観

652:デフォルトの名無しさん
06/07/03 21:21:28
相対的なもんじゃね。

653:デフォルトの名無しさん
06/07/03 22:04:21
他に手段があるならそれと較べて重い(≒遅い)か判断すればいいんじゃない?

pow()はpow(5, 2)と5*5を較べれば一目瞭然だし、malloc()の代わりにC99の可変長配列を使うとか、
malloc(100)を1万回の代わりにmalloc(100 * 10000)すればずっと早くなるわけだし。

654:デフォルトの名無しさん
06/07/03 23:06:35
各辺が全て500以下であるようなピタゴラスの三整数を全て求めよ。
ただし、三重にネストしたforループを使う事。

#include<studio.h>

main()

  int x,y,z;

 for( z = 1, z <= 500 , z++ ){
  for( x = 1, x <= 500 , x++ ){
   for( y = 1, y <= 500 , y++){
    if( pow(z,2) == pow(x,2) + pow(y,2 ))
     printf("%dの二乗は%dと%dの二乗の和に等しい\n",z,x,y);}}}

 return0;



上記で合ってますか?


655:デフォルトの名無しさん
06/07/03 23:15:42
宿題スレで会おう!

656:デフォルトの名無しさん
06/07/03 23:21:42
>>655
スマソ
サンクス

657:デフォルトの名無しさん
06/07/04 01:57:58
ちょっと質問です。

a , b ? c , d : e , f;

a , (b ? (c , d) : e) , f;
と同じでしょうか?

あと、

a = b ? c = d : e = f;

a = (b ? (c = d) : (e = f));

ですか?

どうも3項演算子の優先順位が今ひとつ…。
括弧つけろってのは別の話ということで、
よろしくお願いします。



658:デフォルトの名無しさん
06/07/04 02:11:37
URLリンク(www.google.co.jp)

で、その式はコンパイル通るのか?

659:デフォルトの名無しさん
06/07/04 09:13:57
>>658
VC6で試したけどコンパイルは通りました。

たとえば条件演算子と、代入演算子やカンマ演算子は、条件演算子の方が優先順位の方が高いじゃないですか。
なら、そのまま解釈すると

a = b ? c = d : e = f;

a = (b ? c) = (d : e) = f;

a , b ? c , d : e , f;

a , (b ? c) , (d : e) , f;

こうなっちゃいそうだけどそれじゃあ本当にコンパイルが通らないし、それで聞いてみたんです。

a , b ? c , d : e , f;
これは、
(a , b) ? (c , d) : (e , f);
こう括弧でくくってもコンパイル上は問題になりませんが、優先順位としては明らかにカンマの方が高くなっているから
ありえない。実際動作もそうなってはいないようです。

で、演算子を解釈していくときのプロセスで、3項演算子だけは二項演算子とは違った特異な処理をしているんしょうか?

ちょっと入門の質問じゃないかも知れないですが、どうも自分の考え方が理解の域に達していないので、初心者とし
て質問させていただきました。

グーグル先生以外の人間の達人の方、出来ましたら演算子の解釈順序なんかをご教示くださいませんでしょうか。

よろしくお願い致します。



660:デフォルトの名無しさん
06/07/04 09:28:04
>>659
a = b ? c = d : e = f;

a = (b ? (c = d) : e) = f;

a , b ? c , d : e , f;

a , (b ? (c , d) : e) , f;

だ。
? と : の間は分離なんかできるわけがないから、
ここは常に ? ... : は ? (...) : と同じになる。

661:デフォルトの名無しさん
06/07/04 10:12:54
>>660
どうもありがとうございます。ただ、まだちょっと納得いってません。aを除いて、
b ? c = d : e = f;
これはご教示に従えば

(b ? c = d : e) = f;

こうなりますよね? ここで、bが偽なら 最初の括弧の中は (e) となって、
e = f が実行されますが、 b が真のとき、(c) = f が実行されないのでしょうか?

(b ? c = d : e) = f;

(c = d) = f;

(c) = f;


bが真のとき、実際に挙動を見てみると、

b ? (c = d) : (e = f);

こうなっているように思えるのです。なので、

a = b ? c = d : e = f;

このケースでも、bが真か偽かによって、 a の値が d か f のどちらかになります。


662:デフォルトの名無しさん
06/07/04 10:13:39

改行が多いみたいで、上の続きです。

a = (b ? (c = d) : e) = f;
a = b ? c = d : e = f;

これはトレースすると、挙動が違うんです。もし手軽に試せる状況なら、
追試していただけないでしょうか?

お手数ですが、よろしくお願い致します。






663:デフォルトの名無しさん
06/07/04 10:33:12
(b ? c = d : e) = f; ってコンパイル通るか?
三項演算子は左辺に置けないと思うんだけど。

664:デフォルトの名無しさん
06/07/04 11:11:47
ちと勘違いしてました。VC6でWinMainで試してました。
C++だと変数の参照を返すからコンパイル通るんだ…。

ここはC言語スレでしたかorz

たしかにCだと
b ? c = d : e = f;

これは書けませんね。

ただ、演算子の優先順位というに点だけ着目すると、Cでは
(b ? (c = d) : e) = f;
こうなって左辺値に不適合でエラー

C++だと
b ? (c = d) : (e = f)

このように実動作しているようです。直感的にはC++流の解釈の方が
素直な気がしますが、三項演算子の コロン以降だけを特別処理している
気がしてならない…。

スレ汚し失礼しました。C++スレに行って来ます。

665:デフォルトの名無しさん
06/07/04 11:13:34
言語の優先順位に頼った可読性の悪いソース書くなよ。
括弧使え括弧。


666:デフォルトの名無しさん
06/07/04 11:24:20
>>665
ですので、最初に書いたとおりに、括弧をつけるのは別の話です。
コンパイラの式処理がどうなっているのか勉強しているので。

667:初心者
06/07/06 10:08:35
初心者レスですよね?!心優しい皆さんよろしく!!
数列の長さを設定しました。
キーボードで文字を入力します。
入力した文字が設定した長さを超えるとごみが出て
次の入力を影響します。
設定した長さ以後のごみをメモリからとる方法は??


668:デフォルトの名無しさん
06/07/06 12:47:59
むり

669:デフォルトの名無しさん
06/07/06 13:05:30
FreeBSDやMac OS Xならば、
  fpurge(stdin)
で入力バッファに入っている文字を落とせる。

これが無いとちょっと面倒だけど、とりあえず改行文字まで
落としたかったら
  while(getchar() != '¥n');
でいいんじゃない?

670:初心者
06/07/06 13:06:42
何が無理?


671:初心者
06/07/06 13:13:37
>>669御免初心者なんで、FreeBSD<<わからない。
例として:
#include <stdio.h>
int main(void)
{
char gg[22],*gu;
char hh[33],*jj;

printf("数列入れて>\n");
fgets(gg,22,gu);
printf("数列いれ>\n");
fgets(hh,33,jj);

getc(stdin);
}
数列を多い目に入れると、次の入力ができない。


672:もはもは
06/07/06 13:14:46
HELPです!!!!!

1次元配列に 34 57 45 21 89 63 39 48 78 68 76 84 92 53 62 のデータをセットして、
これらの平均値を求めよ。
さらに int eval[3]という1次元配列を用意して
eval[0] には0〜60の数の個数
eval[1]には61〜80の数の個数
eval[2]には81〜100の数の個数
を格納するようにし、それらを出力するプログラムを作成せよ。

よろしくお願いします。

673:デフォルトの名無しさん
06/07/06 13:29:23
>>671
どうゆう入力を想定してるの?

674:デフォルトの名無しさん
06/07/06 13:32:11
>>671
fgets(標準ライブラリのものと仮定)の使い方が間違ってる。
標準入力から入力して欲しいのなら、

fgets(gg, 22, stdin);
fgets(hh, 33, stdin);

のように書かなくては。

675:初心者
06/07/06 13:54:51
>>673
プログラムの一部なの。(全体は汚いプログラムなので見せない><)
まぁ、かんたんに言えば、
キーボードから入れた文字を好きな所まで取り
オーバーしたものは消す方法。
神様、私の願いを!!!

676:デフォルトの名無しさん
06/07/06 14:09:56
何が言いたいのかよくわからん。
Cより前に日本語をちゃんと勉強しろよ。

677:デフォルトの名無しさん
06/07/06 14:17:55
留学生か?>初心者

678:初心者
06/07/06 14:22:39
勉強中です><(怒らないで);
(本当に外国人です!!!日本語下手で御免なさい><);
会社からcを無理やり勉強させました。
お願いします。

679:デフォルトの名無しさん
06/07/06 14:27:35
english ok

680:デフォルトの名無しさん
06/07/06 14:29:31
・・・変数宣言って何・・・?

681:初心者
06/07/06 14:29:39
むり!韓国語なら>>

682:初心者
06/07/06 14:36:10
#include <stdio.h>
int main(void)
{
char gg[22],stdin;
char hh[33],stdin;

printf("数列入れて>\n");//ここに20文字以上入れるとおかしくなる
fgets(gg,22,stdin);
printf("数列いれ>\n");
fgets(hh,33,stdin);

getc(stdin);
}


683:デフォルトの名無しさん
06/07/06 14:51:10
>>682
おかしくなるのは仕様です。面倒ですが、次のように大きなバッファを用意して、
そこに一旦とりこむ必要があります。配列の大きさよりひとつ少なくしか使えないのは、
最後にヌル文字を入れる必要があるからです。

#include <stdio.h>
#include <string.h>
int main(void)
{
char buf[1024];
char gg[22];
char hh[33];

printf("数列入れて>\n");
fgets(buf, sizeof buf, stdin);
buf[strlen(buf) - 1] = '\0';
memset(gg, '\0', sizeof gg);
strncpy(gg, buf, sizeof gg - 1);

printf("数列いれ>\n");
fgets(buf, sizeof buf, stdin);
buf[strlen(buf) - 1] = '\0';
memset(hh, '\0', sizeof hh);
strncpy(hh, buf, sizeof hh - 1);
}

684:初心者
06/07/06 15:09:57
>>683
先に入れる所用意する事までは分かりました。
でもこれも限界がある(入力がbufの1024字超えれば)と思います。
(他にも使い所あるので><)
butに無限入力できる方法ないかしら??
(どんな入力も対応できる方法)
よろしくおねがいします。

685:デフォルトの名無しさん
06/07/06 15:13:22
ハードウェアのリソースが有限な以上
どんな入力にも対応するなんてのは無理。
そのために仕様が存在する。

686:初心者
06/07/06 15:20:06
>>685
そうなんですか!!!!
本当にありがとうございました。
はんぱな日本語で迷惑かけました>>礼>>

687:デフォルトの名無しさん
06/07/06 20:02:38
CとJavaで、初心者が学びやすいのはどちらでしょうか?
最初に学ぶのはどちらがいいのでしょう…?
またCとJavaは数学的な要素(計算など)がどちらも必要になってくるのでしょうか。
返信お願い致します。

688:デフォルトの名無しさん
06/07/06 20:11:10
>>687
将来プログラミングで生計を立てたいのなら、まずCから。もちろんその後Javaもやる。
趣味でやるならどちらでも。Javaオンリーでもかまわない。

689:デフォルトの名無しさん
06/07/06 20:26:42
>>688
そうですか。
計算などが出てきてしまうと辛いのですが、両者とも計算式を
使ったりするのですか?

690:デフォルトの名無しさん
06/07/06 20:35:08
>>689
プログラミングでどのようなものをやるのかによる。

が、言語そのものの学習中にはほとんど出てこない。
数学的センスがあったほうが有利な場面があるかもしれないが。

691:デフォルトの名無しさん
06/07/06 20:52:14
>>690
わかりました。ありがとうございます。

692:デフォルトの名無しさん
06/07/06 21:03:06
でも1 + 1やx + yもいわゆる計算式ではないだろうか。

693:デフォルトの名無しさん
06/07/06 21:05:18
>>692
ええ、計算式です。間違いなく計算をする数式です。

694:デフォルトの名無しさん
06/07/06 21:09:13
>>692>>693
それはCとJavaの両方とも使うのですか?
Cは関数を計算し求めると聞いたのですが、Javaもなのでしょうか。

695:デフォルトの名無しさん
06/07/06 21:12:42
>>694
その書き込み、本気なのか?
だったら、プログラミングなど勉強するだけ無駄だからやめとけ。

696:デフォルトの名無しさん
06/07/06 21:18:31
数学がさっぱりでもいいが、算数は必須。

697:デフォルトの名無しさん
06/07/06 21:27:52
>>695
私情でやらざるを得ない状況になりましたので、今回[入門]とあったこちらで
質問致しました。

レス参考にさせて頂きます。ありがとうございました。

698:デフォルトの名無しさん
06/07/06 21:31:17
まずやってみたら?プログラミングがどんなことするか分かってない気がする

699:デフォルトの名無しさん
06/07/06 21:49:20
ここにもチョンが湧いてるのか。
ミサイル発射の謝罪と補償を要求する!

700:デフォルトの名無しさん
06/07/06 22:06:02
ここの回答者の人たちは参考書は何を読んで覚えたんですか?
0から始めた参考書と、それなりにわかってから読んだ参考書を教えてください

701:デフォルトの名無しさん
06/07/06 22:17:54
言語としてのCに限るなら林のビギナー編だけしか読まなかったな。
もう後輩に売っちまった。

702:デフォルトの名無しさん
06/07/07 00:42:13
>>699
お前ひとりに直撃すりゃあ良かったのにな。

703:デフォルトの名無しさん
06/07/07 11:30:11
在日は速く半島に帰れ!
また有事の際に日本で儲けていたと半島のチョンに蔑まれ続けるぞ。

704:デフォルトの名無しさん
06/07/07 11:33:22
>>700
0からK&Rの第一版。
20年ぐらい前に覚えたのだが、それ以上にまともに書いてある本はなかった。
その後第二版も読んだ。

705:デフォルトの名無しさん
06/07/07 11:41:42
>>703
憂さ晴らしは妥当な板でどーぞ

706:初心者
06/07/07 12:01:46
>>699話す事あるなら他のレスでどうぞ、
(ちゃんと見るから!!)
このレスを汚くするな!!

707:デフォルトの名無しさん
06/07/07 16:37:53
PGの雇用が奪われてるのは、不法滞在し異常に安い賃金で働くチョンのせい。

708:デフォルトの名無しさん
06/07/07 18:55:02
>>706
いちいち反応するな。流せ

オレモナー

709:デフォルトの名無しさん
06/07/07 23:24:53
>>706の「レス」に反応

710:デフォルトの名無しさん
06/07/07 23:39:50
ごめんね、スレとレスの違いも分からなくて
ごめんね

711:デフォルトの名無しさん
06/07/07 23:44:17
ごめんね、ごめんね、ごめんねごめんね、
ごめんねごめんね、ごめんね、ごめんね、
ごめんね、ごめんね、ごめんねごめんね、
ごめんねごめんしねごめんね、ごめんね、
ごめんね、ごめんね、ごめんね、ごめんね
ごめんねごめんね、ごめんね、ごめんね、

712:デフォルトの名無しさん
06/07/08 10:29:13
チョン氏ね!

713:デフォルトの名無しさん
06/07/09 00:22:08
エンターキーが押されたかどうかの判定の仕方と、
スペースキーが押されたときの判定の仕方を教えてください

714:デフォルトの名無しさん
06/07/09 00:29:35
環境に依存するからもうちょっと情報だして

715:713
06/07/09 00:37:55
標準c言語で、コマンドプロプト上で動かすコンソールアプリです。
OSはWindowsXPです。よろしくお願いします

716:デフォルトの名無しさん
06/07/09 03:15:58
VC++4.0でXP用のソフトを組んでます。
操作ミスなどで警告音を鳴らしたいのですが、
MessageBeep()関数だと単純な音しか鳴らせず、おもしろくありません。
かといって、警告音のためにWAV作ったりするのも大変なので、
少しだけシャレた警告音を簡単に慣らす方法がありませんか?

717:デフォルトの名無しさん
06/07/09 03:24:07
Beep()を沢山つかって音楽でも奏でてはいかが?
10ミリ秒ごとにアルペジオさせれば和音っぽく聞こえて
周りをちょっと驚かすぐらいはできるよ。

718:デフォルトの名無しさん
06/07/09 03:36:44
適当に答えてみる。
>>713
標準c言語だと、getchar()かな?
でも、エンターが押されないと、stdinに入ってこない。
MS-Cだと、getch()が1文字ずつとれる。(エコーなし)
エコーしたいなら、getche()。
<conio.h>に入っている。

719:デフォルトの名無しさん
06/07/09 04:20:51
CでGUIアプリ作る方法教えてください

720:デフォルトの名無しさん
06/07/09 05:49:53
Cでかいたプログラムから命令(メッセージ?)送ると
グラフィックだけ出力してくれるサーバっぽいアプリケーション
ってないですか?


721:デフォルトの名無しさん
06/07/09 05:57:51
X?

722:デフォルトの名無しさん
06/07/09 05:58:37
あ、「Windows」の方が適切かな

723:デフォルトの名無しさん
06/07/09 06:12:09
適当に答えてみる。
>>720
system("start C:\\temp\\test.gif");
なんてやれば、windowsならgif拡張子に関連付けしてるアプリを
よんでくれるはず。(.bmpとか.jpgでもOK)

724:デフォルトの名無しさん
06/07/09 11:38:34
OpenGLとかActiveXの記述だけで描画してくれるアプリが欲しいってこと?
普通は鯖といちいち通信するのが面倒だから自前でライブラリ抱えます。

少しだけシャレた警告音はwavでも鳴らさないと無理な悪寒。
どんなのが少しだけシャレた警告音なのか録音してウpしてみてくれ。

常に入力を監視する。
スペースかリターンが押されたのを判定すればいい。
普通はキー入力があったらイベント飛んで来るから、入力に対応した処理を記述しておけばOSが実行してくれる。

725:713
06/07/09 11:39:33
適当な回答ありがとうございます。参考になりました

726:デフォルトの名無しさん
06/07/09 11:56:05
MS Visual C++ NET
BorLand C++ Builder6
てどちらが使いやすい?



727:デフォルトの名無しさん
06/07/09 22:16:51
両方使ってみてそれぞれにスレがあるから感想でもカキコしてみたら?
ムカつくほうは使わないほうがいいと思う。ストレス感じるだけ。

728:デフォルトの名無しさん
06/07/09 23:29:29
>>726
単なる数値計算やら簡単なプログラム(アルゴリズムの勉強)程度なら
Borland C++ 5.5が手軽で良いYO!

729:716
06/07/10 01:26:04
>>717
10mS毎に?
うーん、他にいい方法がなかったら試してみます(汗

730:デフォルトの名無しさん
06/07/10 01:36:13
質問です。
「'」という文字を配列に格納したいのですが、エラーが出てうまくいきません。
エラーは以下の3つです。
文字列定数は1文字か2文字でなければならない。
,が必要。
文字列または文字定数が閉じていない。

宜しくお願いします。

731:デフォルトの名無しさん
06/07/10 01:41:01
¥’

732:デフォルトの名無しさん
06/07/10 03:17:38
>>731
ありがとうございます!

733:デフォルトの名無しさん
06/07/10 12:36:59
>>730-731
せめて半角で書いて欲しいとオモタ

734:デフォルトの名無しさん
06/07/10 20:38:16
CHAR PTCHAR TCHAR WCHAR型の違いを教えてください

735:デフォルトの名無しさん
06/07/10 21:49:40
typedef char CHAR;
typedef wchar_t WCHAR;
#ifdef UNICODE_
typedef WCHAR TCHAR;
#else
typedef CHAR TCHAR;
#endif
typedef TCHAR *PTCHAR;

736:726
06/07/10 21:50:19
>> 728
サンクス

737:デフォルトの名無しさん
06/07/10 21:58:42
putchar だけで文字コード 112、117等 を出力するプログラムを教えてください。

738:734
06/07/10 22:08:03
>>735
アリガ10

739:デフォルトの名無しさん
06/07/10 22:28:49
>>737
putchar(112)

740:デフォルトの名無しさん
06/07/10 22:58:26
そのまんまですな。

741:デフォルトの名無しさん
06/07/11 02:29:38
ワロタ

742:デフォルトの名無しさん
06/07/11 02:33:22
CでGUI?
WindowsならWin32
LinuxならGTK+
どっちもCライブラリ

743:デフォルトの名無しさん
06/07/11 09:08:17
>>728
BorlandC++と一緒にTurboDebugger落として使ってみたら、
このデバッガって、キャラクタ画面ベースのUIなのな。
あまりに懐かしいスタイルにめまいがしたyo!

744:デフォルトの名無しさん
06/07/11 16:09:48
GUIのデバッカってメモリ喰うしデバッカに落ちた時点で表示できないと思う。

745:デフォルトの名無しさん
06/07/11 22:50:17
DLL内でmallocした物をexeからfreeしてはいけないと聞いた事があるのですが
malloc以外のHeapCreateやHeapAlloc(GetProcessHeapとかなら問題ないのでしょうか?

746:デフォルトの名無しさん
06/07/11 23:12:42
>>745
確保するときと解放するときとで、同じヒープハンドルを用いれば問題ない。

けれどDLLでメモリを確保して、そこへのポインタをEXEに返すのだったら、
DLLはそのメモリを解放する関数も公開するのが一般的だと思う。

747:デフォルトの名無しさん
06/07/11 23:19:17
>>745
ちなみに前者がいけない理由が、ことなるメモリマネジメントルーチンを使っている
可能性があるから。VCのDebug/Releaseモードとか。

748:デフォルトの名無しさん
06/07/11 23:45:52
>>746-747
そのルーチン覗いてみるのも勉強になるかもしれませんね。
とりあえず一般的な方法でしてみたいと思います。
ありがとうございました。

749:デフォルトの名無しさん
06/07/12 01:01:46
VC++なんですが、以下のように配列を定義しています。
signed short foge[]={
0x0001,
0x7fff,
0x8000,
0xffff
};


コンパイルするとマイナス値(0x8000と0xffff)で
warning C4305: 'initializing' : 'const int ' から 'short ' へ切り詰めます。
というワーニングがでます。
C言語ではsigned 16bitを表す接尾子が無いようなんで、
キャストで回避するしか無いんでしょうか?


750:デフォルトの名無しさん
06/07/12 01:04:40
素朴な疑問。
何故const signed shortにしないのだろう。
それはさておき、-0x8000, -0x0001ではダメ?

751:デフォルトの名無しさん
06/07/12 01:11:56
>>749
よくわからないけど、キャスト以外の方法で、警告消したいだけなら
0x8000 → -32768
0xFFFF → -1
とか、#pragma とかがあるよ。

752:デフォルトの名無しさん
06/07/12 01:26:04
すみません
ファイルからの読み込みなのですが
改行がCR(0D)のみで書かれているテキストファイルから
テキストモードでデータを読み込みたいのです

fscanf(fp,"%d",&data1);
のように書くと、だいたいはCRのみの改行も改行として読んでくれるのですが
たまに改行をすっ飛ばして変な値を読んでしまいます

改行がCRのみのテキストファイルをうまく読み込む方法はありませんでしょうか

753:デフォルトの名無しさん
06/07/12 01:27:43
fgets()

754:デフォルトの名無しさん
06/07/12 10:47:28
>>752 だいたいうまくいくけど、たまに変になるって、違うところでバグってるんじゃないの?


755:デフォルトの名無しさん
06/07/12 11:17:19
3.4E-38って
0.00000000000000000000000000000000000000034?


756:デフォルトの名無しさん
06/07/12 11:49:45
>>755
0.000000000000000000000000000000000000034


757:デフォルトの名無しさん
06/07/12 14:13:29
>>756
あ、ごめん、3のところが38番目になればいいのね。
じゃあfloat型って3.4E-38〜3.4E+38って書いてあるから
34000000000000000000000000000000000000〜0.000000000000000000000000000000000000034?
でも有効桁7桁ってどういうこと?

758:デフォルトの名無しさん
06/07/12 14:42:48
>>757
>でも有効桁7桁ってどういうこと?
数学の時間寝てたのか
それともまだ習ってないのか
まあとにかくググれ。

759:デフォルトの名無しさん
06/07/12 15:01:17
ぐぐってもわからん
float fe;
fe=5e2;
って書くと
500.000000
って出力されるけど、どこが7桁?

760:デフォルトの名無しさん
06/07/12 15:21:00
>>759
俺のところで実行したらこうなるよ。

#include <stdio.h>

main()
{
float f = 1.0 / 3;
double d = 1.0 / 3;

printf("%.30f\n", f);
printf("%.30f\n", d);

return 0;
}

結果
0.333333343267440795898437500000
0.333333333333333314829616256247



761:デフォルトの名無しさん
06/07/12 15:22:11
グローバル変数を多用してしまうのですが、
変数を各関数で共有する方法ってグローバル変数以外に何かありますか?

762:デフォルトの名無しさん
06/07/12 15:31:49
>>757
3.4E-38 は 3.4 * 10の-38乗 だ。
有効桁数は扱える桁数。7桁なら 1.234567 とか 1.234567E+100 とか、
とにかく 7 桁は扱えるが 1.2345678 と書いても最後の 8 が扱えない。

>>759
どう出力されるかということと内部的に何桁保持されているかという
ことは別の話。


763:デフォルトの名無しさん
06/07/12 15:35:45
>>760
いやそうなるのはわかるけど、
float型が3.4E-38〜3.4E+38で有効桁7桁ってどういう意味?
float f = 1.0/3
printf("%f")
だと
0.333333
で7桁まで出力されるって意味?
3.4E-38〜3.4E+38ってどういうこと?
出そうと思えば50桁以上出せるけど…

764:デフォルトの名無しさん
06/07/12 15:39:15
>>761
必要な変数は構造体のメンバにして
その構造体へのポインタを受け渡しする。

765:デフォルトの名無しさん
06/07/12 15:39:28
>>762どうも
じゃあfloat型が3.4E-38〜3.4E+38っていうのは?

766:デフォルトの名無しさん
06/07/12 15:50:21
普通に3.4*10^-38〜3.4*10^38でしょ?
3.400000*10^38のほうが正しいかな?

767:デフォルトの名無しさん
06/07/12 15:53:15
>>764
ありがとうございます、さっそくチャレンジしてみます

768:デフォルトの名無しさん
06/07/12 15:53:27
>>766
はあ・・・
でも10の50乗でも100乗でも入力できるし出力も出来るよ?

769:デフォルトの名無しさん
06/07/12 15:56:39
なんかよくわかんないけど、まあこれでも読んでよ。

「浮動小数点型と誤差」
URLリンク(www.kyoto-su.ac.jp)

770:デフォルトの名無しさん
06/07/12 16:04:31
>>769
ああ…それよんだんだけど
1.175494 10-38 < float の絶対値 < 3.402823 10+38
って書いてあるよね。
私の本は
3.4E-38〜3.4E+38
って書いてあるよ。
それで、例えば、
float f=1000000000000000000000000000000000000000000000000.00000000000000000000000000000000000000001;
printf("%40.40f",f);
って書いても
1000000000000000000000000000000000000000000000000.00000000000000000000000000000000000000001;
って表示されるよ。38超えてるよ?

771:770
06/07/12 16:07:09
あ、ちょっとコピペミスしたけど、気にしないで

772:デフォルトの名無しさん
06/07/12 16:11:00
>>770
コンパイラ何使ってるの?

773:デフォルトの名無しさん
06/07/12 16:11:58
floatよりdoubleの方が速いってよ

774:770
06/07/12 16:12:42
>>772
cygwinのgccだけど・・・

775:デフォルトの名無しさん
06/07/12 16:16:17
>>774
>>770のソースを「全部」コピペしてみて。動かしてみるから。

776:770
06/07/12 16:20:30
>>775え・・・でも770そのまんまだよ?

#include <stdio.h>

main(){
float f=1000000000000000000000000000000000000000.0000000000000000000000000000000000000001;
printf("%40.40f\n",f);
}

終わり。




777:デフォルトの名無しさん
06/07/12 16:22:13
>>776
うちでは"Inf"って表示されるけど・・・
gccのバージョンはいくつ?

778:770
06/07/12 16:24:22
gcc version 3.4.4 (cygming special)
です。

779:770
06/07/12 16:26:21
コンパイラの問題なの?

780:777
06/07/12 16:30:09
>>778
おかしいな・・・。うちとまったく一緒のコンパイラなのに。
ちなみに
printf("%d\n", sizeof(1000000000000000000000000000000000000000.0000000000000000000000000000000000000001));
ってやってみて。
8って表示されるはずだから。これはその数値がdouble型のリテラルだって
コンパイラが判断してることを示してる。それをfloat型に代入するときに
暗黙の型変換が行われるはずなんだけど・・・。

ってことで、俺はお手上げ。


781:777
06/07/12 16:30:42
あ、ちなみに"Inf"ってのはInfinityね。正の無限大。

782:デフォルトの名無しさん
06/07/12 16:34:30
>>770
そのソースでそのgccだと、警告が表示されると思うのだがそれをコピペして見給え。

783:770
06/07/12 16:38:20
>>777
printf("%d\n", sizeof(1000000000000000000000000000000000000000.0000000000000000000000000000000000000001));
ってしたら
core dump
しました。
うちの環境がおかしい?WinXP Cygwin最新のものだけど…
入れなおすか…?

どうもありがとうございました。うちがおかしいってことが分かったのでうれしいです。


784:777
06/07/12 16:39:20
>>782
-Wallでも出ない。

785:デフォルトの名無しさん
06/07/12 16:39:53
釣りか? 壮大な釣りだったのか?

786:770
06/07/12 16:41:12
>>783
あ、いや、間違ってた
printf("%d\n", sizeof(1000000000000000000000000000000000000000.0000000000000000000000000000000000000001));
でちゃんと8って表示されました。

>>782
警告も何にも出ませんよ。普通にa.exeすると結果表示されます。

787:777
06/07/12 16:42:35
>>786
んじゃ、最後にuname -aした結果をコピペしてくれ。

788:782
06/07/12 16:46:07
>>770
>>777
警告出ないか? main()の戻り値の型がないと。漏れの端末だとこうなるのだが。
--
$ gcc --version ; gcc foo.c
gcc (GCC) 3.4.4 (cygming special) (gdc 0.12, using dmd 0.125)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

foo.c:3: warning: return type defaults to `int'
foo.c: In function `main':
foo.c:6: warning: control reaches end of non-void function

789:770
06/07/12 16:47:14
う〜Cygwinコピペできないからつらい
uname -a は
CYGWIN_NT-5.1 ****** 1.5.19(0.150/4/2) 2006-01-20 13:28 i686 Cygwin
です。名前は伏せ。珍しくもないけど

790:デフォルトの名無しさん
06/07/12 16:48:04
>警告も何にも出ませんよ。普通にa.exeすると結果表示されます。
make使ってて更新されたと認識されていないとか、違うところのa.exeが起動されているとか。
make使わず直接gccを動かしてみるとか、明示的にパスを指定してみるとかしてみたら?

791:デフォルトの名無しさん
06/07/12 16:49:54
普通にcygwinをインストールすると所謂dos窓で動くから、
マウスで範囲選択して右クリックでコピペされると思うけどなぁ。

792:デフォルトの名無しさん
06/07/12 16:50:08
sizeof(float) が 8 だったりしたら…


793:777
06/07/12 16:51:56
>>788
あ、すまん、そこは警告出る。警告でないといったのは、4,5行目に関して。
手間かけさせてスマンかった。

794:777
06/07/12 16:53:26
>>789
うちより一つ新しいバージョンだな。ちなみにうちは、
CYGWIN_NT-5.1 MARS 1.5.18(0.132/4/2) 2005-07-02 20:30 i686 unknown unknown Cygwin

最新の1.5.20も怪しいところがあるみたいだから、しばらく更新はしないでおこうw

795:770
06/07/12 16:53:38
>>782
あ、範囲指定できたんだCygwinて・・・
gcc (GCC) 3.4.4 (cygming special) (gdc 0.12, using dmd 0.125)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

しかでません。makeつかってません。フォルダの中にa.exeもソースも一個しかありません。


796:デフォルトの名無しさん
06/07/12 16:56:04
実行するときに

./a

または

./a.exe

でやってる?


797:770
06/07/12 16:56:57
>>796
やってますよ〜
そこまでバカではない・・・w


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5135日前に更新/249 KB
担当:undef