【初心者歓迎】C/C++室 Ver.32【環境依存OK】

このエントリーをはてなブックマークに追加
952949:2006/11/23(木) 19:36:42
申し訳ありません。移動します
953デフォルトの名無しさん:2006/11/23(木) 19:50:13
駆け出しです。

char *r = "あいうえお";

として、最初の1文字、2文字を表示させようと思って
printf("%-2s %-4s",r,r);

としたのですが、これではすべてが出力されてしまいます。
どうすれば?
954デフォルトの名無しさん:2006/11/23(木) 19:54:38
char buf[ BUF_MAX ];
で宣言された配列をwhile()ループで回す時に、buf[ BUF_MAX ]へのポインタ
が必要になったのですが、
char *p_buf_end = buf[ BUF_MAX ];
にしてしまうと、p_buf_endという名前が buf[ BUF_MAX -1 ] と紛らわしい
のではないか?と悩んでいます。
この場合、どのような変数名にするのが無難でしょうか?
955デフォルトの名無しさん:2006/11/23(木) 20:00:04
>>953
ドットも忘れないでやってください。
Ex.
"%-.2s"
956デフォルトの名無しさん:2006/11/23(木) 20:01:03
>>954
std::vectorでは、end()とlast()で使い分けている。
957デフォルトの名無しさん:2006/11/23(木) 20:02:36
>>956
参照してみます。ありがとうございました。m(__)m
958デフォルトの名無しさん:2006/11/23(木) 20:05:05
>>956 std::vector に last() なんてないぞ。
959デフォルトの名無しさん:2006/11/23(木) 20:26:57
>>955
できたよ!
どうもありがとうございました。
960デフォルトの名無しさん:2006/11/23(木) 23:25:31
>>954
for(i = 0; i < sizeof buf; i++) {
  buf[i];
}

わざわざポインタ使う必要ないんじゃない?
961デフォルトの名無しさん:2006/11/23(木) 23:29:05
>>960
名前の付け方に関する質問なんだからそのレスは見当違いだろう。
仮に今回はそれでいいとしても配列を超えたとこのポインタが必要になることはないとも限らん。
962デフォルトの名無しさん:2006/11/24(金) 00:00:09
クラス名・変数名に迷ったら書き込むスレ。Part8
http://pc8.2ch.net/test/read.cgi/tech/1154448184/l50
963デフォルトの名無しさん:2006/11/24(金) 02:30:01
p_buf_goal = buf + BUF_MAX
964デフォルトの名無しさん:2006/11/24(金) 03:16:22
loadavgファイルに過去の負荷が1行に1つで、
計10万ほど保存されていて、
下記のようなコードを書いて読み取ろうとしたところ、
はじめの3千から4千行ぐらい(?)まではうまくいくのですが、
途中からファイルから数値をよみこんでくれなく、
同じ数字のみが出力されるようになります。
どのようにすれば全部の数字を読み込んでくれるでしょうか?

#include<fstream>
int i;
float avg,outavg;

ifstream infile("loadavg");
for(i=0;i<60000;i++){
infile>>avg;
outavg=avg/0.02
cout<<outavg<<"\n";
}
965デフォルトの名無しさん:2006/11/24(金) 03:20:56
>>964
- for(i=0;i<60000;i++){
- infile>>avg;
+ while(infine>>avg){
966デフォルトの名無しさん:2006/11/24(金) 03:36:56
>>965
今試してみましたが
8825行目ぐらいまでしか読み込んでくれません。
何事もなかったかのようにwhileループを抜けてしまいます。
967デフォルトの名無しさん:2006/11/24(金) 03:42:13
>>966
8825行目あたりに float として読めない文字があるんじゃないの?

あとは、 #include <cstdio> して while ループ抜けた後
if (!infile.eof()) perror("infile"); ってしとけ。
出入力エラーがあれば、これで表示されるだろう。
968デフォルトの名無しさん:2006/11/24(金) 04:46:57
>>967
ファイルを確認してみたところ特に変わったところはありませんでした
あと、試してみたところ,sucessと表示されました。
969デフォルトの名無しさん:2006/11/24(金) 05:30:34
オーバーフロー
970デフォルトの名無しさん:2006/11/24(金) 07:25:06
>>968
やっぱり途中で止まってるな。 >>967 のとおりだろ。
最後に読み込まれた数値の次にある文字列をファイルの
先頭にコピペすれば、どうせ最初で止まるだろう。
971デフォルトの名無しさん:2006/11/24(金) 11:02:50
Hoge(Foo& foo);
って宣言したコンストラクタがgccでコンパイルとおらない。
error: expected `)' が '&' トークンの前にあります
こういうエラー出してくる。
972デフォルトの名無しさん:2006/11/24(金) 11:20:39
>>971
同じ問題の発生する最小のソースと、コマンドラインを貼ってみろ。
973デフォルトの名無しさん:2006/11/24(金) 11:26:00
Cとしてコンパイルしている落ちとか。
974デフォルトの名無しさん:2006/11/24(金) 11:30:03
>>972
namespace foo
{

class Hoge
{
public:
Hoge(foo::Foo & foo);
virtual ~Hoge() = 0;
virtual void setStereo(bool flag) = 0;
virtual bool isStereo() = 0;
private:
protected:
};

}

/usr/local/bin/i386-mingw32-g++ -fno-exceptions -fno-rtti -I.
975デフォルトの名無しさん:2006/11/24(金) 12:19:02
ステップ実行中ではifstreamがファイルの読み込みに失敗します。なぜですか?
Microsoft Visual C++ 2005 Express Edition + STLPort 5.0.2の環境です。
976デフォルトの名無しさん:2006/11/24(金) 13:07:18
>>974
namespaceのfooとHogeコンストラクタの仮引数のfooが被ってる
977デフォルトの名無しさん:2006/11/24(金) 13:12:12
>>976
仮引数の名前を変えてもエラーが出ます。
978デフォルトの名無しさん:2006/11/24(金) 13:22:05
>>977
namespace foo の中に Foo は解決されてるのか?
最小コードが >>974 だとしたら、foo::Foo なんて型はないぞ
979デフォルトの名無しさん:2006/11/24(金) 13:29:03
>>972
インクルードで解決してる。
980デフォルトの名無しさん:2006/11/24(金) 14:04:13
>>974
こういう情報を小出しにするアホは死んだ方がいい
981デフォルトの名無しさん:2006/11/24(金) 14:22:37
>>980
何が必要十分であるか分からないくせに
自分で勝手に判断して情報を制限・抽象化する。
初心者とはそういうものだ。
初心者歓迎のスレタイ掲げてその台詞はちときつい気がするよ。
982デフォルトの名無しさん:2006/11/24(金) 14:29:15
質問しても良いですか?
メモリの指定範囲で書き込んだ値を調べる関数を作っています。
writeがメモリに書き込んだ値で、違う値が書き込んであったら-1を返します。
int color_false(char *memadd, char write, int sx, int sy)
{
char p;
int x, y;
for (y = sy; y <8; y++){
for (x = sx; x<8; x++){
p = memadd[ y * 320+ x ];
if(write != p)
goto hoge;
}

}
return 0;
hoge:
return -1;
}
まったく逆のメモリに書き込む関数は上手くいったのですが、
書き込んだ値を読み込む関数が上手くいきません。
何故か違う色を書き込んでいるところを指定しても
戻り値が0になってしまいます。
for文をネストしなくてVRAM[100]とかだと、上手く識別してくれます。
基本的に書き込む時と逆の処理しかしていないのですが
何故上手くいかないか分かる方いらっしゃいますでしょうか?
983デフォルトの名無しさん:2006/11/24(金) 14:37:54
>>982
>for (y = sy; y <8; y++){
>for (x = sx; x<8; x++){

何やってんだよ
やりたいことは y < (sy+8) と x < (sx+8) か?

あと if( write != p ) return -1; でいっきに抜けたほうがきれいだぞ
がんがれ
984デフォルトの名無しさん:2006/11/24(金) 14:52:46
>何やってんだよ
>やりたいことは y < (sy+8) と x < (sx+8) か?
違うんです。
p = memadd[ y * 320+ x ];
memadd[0]、memadd[1]、memadd[3]、memadd[320]、memadd[321]・・・
見たいな感じで調べたいんです。
変数を使うと上手くいかないんです。
>あと if( write != p ) return -1; でいっきに抜けたほうがきれいだぞ
>がんがれ
if( write != p ) return -1;って出来ますよねぇ。
何やつっても上手くいかないので、goto文使えばうまくいくかなっと思って
いろいろ試してました。
頑張ります。
985デフォルトの名無しさん:2006/11/24(金) 14:57:48
>>984
違うってことはsy,sxが8以上だと何もせずにチェックが終了することになるが・・・
986デフォルトの名無しさん:2006/11/24(金) 15:05:44
やりたいことはfor (x = 0; x < sx; ++x) だと思うんだがなぁ。
987デフォルトの名無しさん:2006/11/24(金) 16:35:55
>>985
>>986
ナイスな返答有難うございます。
分かりました!
988デフォルトの名無しさん:2006/11/24(金) 16:38:25
エスパーが必要だな。
989デフォルトの名無しさん:2006/11/24(金) 17:15:35
紙ヒコーキ先生に命中
990デフォルトの名無しさん:2006/11/24(金) 17:36:46
ツいてないね
991デフォルトの名無しさん:2006/11/24(金) 17:41:39
テレポーテーショーン
992デフォルトの名無しさん:2006/11/24(金) 18:59:16
Cって関数の引数に構造体使うとコピーされるんでしたっけ?
993デフォルトの名無しさん:2006/11/24(金) 19:04:15
>>992
YES コピーされるよ
994デフォルトの名無しさん:2006/11/24(金) 19:54:07
関数の引数に構造体を指定できない処理系ってありますか?
995デフォルトの名無しさん:2006/11/24(金) 20:28:28
よっぽど古かったりサブセット過ぎたりすると、構造体はポインタでないと渡せなかったり内部で勝手にポインタ渡ししたりする。
996デフォルトの名無しさん:2006/11/24(金) 22:16:35
構造体の値渡しは勘弁してくれ
997デフォルトの名無しさん:2006/11/24(金) 22:23:00
>>996
っ[ldiv]
998:2006/11/24(金) 22:38:07
Windowアプリケーションが作りたくて、Win32 APIについて勉強しています。
その中で、C言語でつくったプログラムを使用したいのですが、どうすればよいのかまったくわかりません。
そもそも、そういうことはできるのですか?
999デフォルトの名無しさん:2006/11/24(金) 22:44:42
1000デフォルトの名無しさん:2006/11/24(金) 22:45:12
ついでに1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。