S117 の回答履歴

全72件中41~60件表示
  • データの区切り?

    こんにちわ。前回質問に御答え頂いて誠に有難う御座います。 さて、今回の質問なんですが、文字列の分割の方法が分からなくて困っています。 以下プログラムです。 //////////////////////////////////////// /*make_date.cpp*/ #include <stdio.h> #include <string.h> #define MAX_LEN 1000 #define MAX_LEN2 1000 #define BUFFER_SIZE 200 int main() { int i, len, cnt = 0; char *cp2; //「カテゴリー」「更新日」「職種」「登録日」 const char *delim2 = ":"; //改行用単語1 const char *delim3 = "@D"; //改行用単語2 const char *delim4 = "@P"; //改行用単語3 const char *delim5 = "@A"; //改行用単語4 const char *delim6 = "@Q"; //改行用単語5 const char *delim7 = "@W"; //改行用単語6 const char *delim8 = "@Z"; //改行用単語7 const char *delim9 = "@C"; //改行用単語8 const char *delim10 = "@T"; //改行用単語9 char buffer[BUFFER_SIZE]; char aiu[100]; char *wordss[MAX_LEN2]; FILE *fp,*pf; //ファイルポインタ //---------------------------------------------------- //各項目を選ぶ処理(カテゴリ) if((fp=fopen("data.dat","r")) == NULL ){ printf( "datファイルが存在しません。\n" ); } wordss[0] = fgets( aiu, 256,fp ); cp2 = wordss[0]; //そして、保存の為、取得したデータを「entry.bk」に入れ込む。 pf=fopen("entry.txt","w"); //区切り処理1 wordss[0] = strtok(cp2, delim9); //文字列に代入されている状態を確認 printf( "\n\n%s", wordss[0] ); //書き込み処理 fputs(wordss[0],pf); cp2 = NULL; //ファイル・クローズ fclose(pf); //ファイル・クローズ fclose(fp); return 0; } //////////////////////////////////////// /*data.dat*/ 20080714@TSE@C20080816@Z公開20090201@WSE@Q20090205@Aテスト20090206@PSE@D20090206:会議 //////////////////////////////////////// 現在このようなプログラムがあります。 「ddata.dat」の中にある文字列の【20080714】だけを取り出し、 「entry.txt」へ書き出します。(「delim10」を使用し「@T」があったら、改行します。) 次に【SE】だけを取り出し、 「se.txt」へ書き出す処理を作成中なんですが、 試しに【SE】を書き出すのかチェックするため「delim9」を使用し、試してみましたが、書き出されるのが【20080714】になってしまいます。 これを【20080714】【SE】【20080816】と書き出すにはどのようにしたら良いでしょうか? 説明が分かり難く申し訳御座いませんが宜しくお願いします。 タイトルも分かり難く申し訳ないです・・

  • newとunsignedについて

    初めまして. OS:windows XP ソフト:VisualStudio.net2003(C++) を使用してプログラミングをしています. (C++を始めて1ヶ月の初心者です) 動的配列を確保する上で,unsignedを使用する場合, unsigned short *Array = new unsigned short[size]; としているのですが,デバックをした際に妙な(ハングルなどの意味のない)文字列が配列ポインタの後についてしまいます. 心配になり, unsigned short *Array = (unsigned short *)new unsigned short[size]; としてみたのですが,それでもその文字列がポインタの後ろについてしまいます. これは問題がないのでしょうか? ご指摘願います. 追記:このあとで物理量から16bitバイナリーデータに変換する(D/A変換器の)関数でエラーがでており,このnewの使い方が怪しいと思ってます.

  • printfについて

    printfで void main() { int n=0.1; printf("%g",n); } と入力したのですが、 出力結果が-5.34432e+226と出たのですが、なぜなのでしょうか?

  • コンパイルできるのですが実行途中でエラーが

    #include<iostream> #include<cstdlib> using namespace std; class stack{ char *stck; int tos; int size; public: stack(char c); void push(char ch); char *pop(); ~stack(); }; stack::stack(char c){ tos=0; stck=(char*)malloc(c); size=c; cout<<"生成スタック\n"; if(!stck){ cout<<"メモリ割り当てエラー\n"; exit(1); } } void stack::push(char ch){ if(tos==size){ cout<<"スタックは一杯です\n"; return; } *stck=ch; stck++; tos++; } char *stack::pop(){ if(tos==0){ cout<<"スタックは空です\n"; return 0; } stck--; tos--; return stck; } stack::~stack(){ free(stck); } int main(){ stack s1(10),s2(10); int i; char *o; s1.push('a'); s2.push('x'); s1.push('b'); s2.push('y'); s1.push('c'); s2.push('z'); for(i=0;i<5;i++){ o=s1.pop(); cout<<"s1をポップする"<<*o<<"\n"; } for(i=0;i<5;i++){ o=s2.pop(); cout<<"s2をポップする"<<*o<<"\n"; } return 0; } なんですが、実行した所 生成スタック 生成スタック s1をポップするc s1をポップするb s1をポップするa スタックは空です までで止まってしまいます。 たぶんreturn 0の戻り値の型がポインタだから止まってしまうのだろうと思います。 正しく実行するにはどうすればいいのでしょうか? お願いします。

  • 最新はVistaなのになぜXPを選ぶ人がいるんですか?

    こんばんは。 もうOSの最新はとっくにVistaなのに お店でもXPは販売してますし 中には選べるのもあるし VistaからXPへ落とせるのもあるんですよね(勉強しました!) この場合はデーターは消えるとして何度もVista、XPの入れ替えができるのですか? あとなぜ最新がVistaなのにXPを選ぶ人がいるのでしょうか? 最新がXPのときそういうことはなかったですしサポートが延長したと いってもきっとXPの方が早く終わっちゃうでしょうし。 私的にはVistaの宣伝を見て「エプスプローラーが立体になんなくてもいいや。メモリも2GもいるんならXPで十分」とは思ったのですが 保守やメンテナンスで強化されているところもあると思うんです。 それでもXPを選ぶというのはどういう理由があるのでしょうか? どうぞよろしくお願いいたします。

  • 文字列の検索

    先日同じ質問をして、プログラムの内容を修正したのですが、今度は2つ文字列を入力した後0が無限にでてきます… どなたか解説・指摘・模範解答などおねがいします。 内容は最初にある文字列を入力して、その後別の文字列を入力して、 後に入力した文字列が最初に入力した文字列に含まれていれば1、 含まれていなければ0と表示するプログラムです。 (使用するのは#include<stdio.h>のみ、ポインタ変数必須です) #include<stdio.h> char *mystrfin(char *a, char *b); int main(void) { char *c,*d; char str1[100],str2[100]; printf("1>>"); fgets(str1,100,stdin); printf("2>>"); fgets(str2,100,stdin); *mystrfin(c,d); } char *mystrfin(char *a,char *b){ char *c,*d; while(c!='\0'){ c=a; d=b; while(c!='\0' && d!='\0'){ if(c!=d) printf("0"); break; c++; d++; } } if(d='\0') printf("1"); a++; return a; return NULL; } 例 検索対象文字列:asdfghjkl 検索文字列:sdf 1と出力 検索対象文字列:asdfghjkl 検索文字列:qwer 0と出力

  • 画面の文字がなんか変です。にじむ?

    こんにちわ。 DELLのInspiron1526を購入しました。 電源を入れて、ネットを繋げて、いろいろと触っていたのですが、ふと画面の文字が何かおかしいのに気づきました。 おかしいというのは、ガジェットの文字やIEの文字は問題なく表示されているのですが、マイコンピュータでの文字はなんか、にじんでいるというか、XGAの液晶画面にSXGAの設定をした時に文字が伸びる感じになっているのですがvistaでは標準なのでしょうか? 画面の設定は1280×800となっていたので画面の設定間違いではないと思うのですが如何でしょうか? ちなみに画像もUPしてみました。 http://blog.goo.ne.jp/nokananko/e/5cbbf2dea589b612cac2514f5ce79950

  • C言語 説明文

    C言語(文字列のコピーについて) /* 文字列のコピーを行う関数の実現例 動作原理のコメントを書き入れる */ #include <stdio.h> /*-----文字列のコピー(1)-----*/ char *scpy1 (char *d, const char *s) { int i = 0; while ((d[i] = s[i]) != '\0') { i++; } return(d); } /*-----文字列のコピー(2)-----*/ char *scpy2 (char *d, const char *s) { char *p = d; while ((*d = *s) != '\0') { d++; s++; } return(p); } /*-----文字列のコピー(3)-----*/ char *scpy3 (char *d, const char *s) { char *p = d; while ((*d++ = *s++) != '\0') { ; } return(p); } /*-----文字列のコピー(4)-----*/ char *scpy4 (char *d, const char *s) { char *p = d; while (*d++ = *s++) { ; } return(p); } int main(void) { char astr[] = "ABC"; char bstr[8], cstr[8], dstr[8],estr[8]; scpy1 (bstr, astr); scpy2 (cstr, astr); scpy3 (dstr, astr); scpy4 (estr, astr); printf("astr = %s\n" , astr); printf("bstr = %s\n" , bstr); printf("cstr = %s\n" , cstr); printf("dstr = %s\n" , dstr); printf("estr = %s\n" , estr); return (0); } ----------------------- このプログラムに、この行で何をやっているのかわかるように 一言くらいの説明文を入れる問題です。 ところどころはわかるのですが、わからないところの方が多いです。 プログラムが長くて大変かとは思いますが、どうかよろしくお願いいたします。 このプログラム自体はちゃんとコンパイルでき、実行もできたので おそらく間違いないと思います。

  • Cプログラムの質問

    スペースを9個あけ、その次に*を表示させ、改行するというプログラムを作ろうとしています。一応プログラムを作ってみたんですが、いきませんでした。 #include <stdio.h> int main(){ int y, n; y = 10; while(n < y){ putchar(' '); } putchar('*'); putchar('\n'); return 0; } 初心者なので、どこが間違っているのかわかりません。教えてください。

  • 困っています

    ソースファイルがある場所にコマンドプロンプトで移動し、 GNU c compilerを起動させようとしてもエラーが起こります。 何がダメなのでしょうか? 友達は環境変数PATHが必要と言っていますがそれが必要 なのですか? 分かりにくい質問ですが、回答お願いします。 ちなみにOSはVISTAです。

  • 困っています

    ソースファイルがある場所にコマンドプロンプトで移動し、 GNU c compilerを起動させようとしてもエラーが起こります。 何がダメなのでしょうか? 友達は環境変数PATHが必要と言っていますがそれが必要 なのですか? 分かりにくい質問ですが、回答お願いします。 ちなみにOSはVISTAです。

  • if文の中のif文・・・について

    質問させていただきます。 if文の中のif文の記述の仕方について質問があります。 例えば if ( x > 0 ){ a = b+c; if ( a > 1) d = e+f; ・・・1 if ( a < 1) d = e-f; ・・・2 if ( a = 1 ) d = 1-g; ・・・3 } h = d + i; aが1より大きい場合は、1の処理を、aが1より小さい場合は2の処理を、aが1と同じであった場合、3の処理をして最終的に、h = d + i;の式の d に代入して h を求めたいと思っているのですが、うまくゆきません。 if文の中のif文の記述はどのようにすればよいのでしょうか? よろしければご教示よろしくお願いします。

  • ワイド文字のバイト数が取得できず困っています。

    ワイド文字のバイト数を求めたいのですが、文字数しか取得することが出来ません。 ワイド文字のバイト数を取得する事は出来ないのでしょうか? Visual C++ 2008 Express Edhition の デバックモードで動かしています。 ****************************** wchar_t s[256]; s = L"abcあいう"; int len = wcslen(s); ******************************

  • 巨大なテキストファイル(可変長)を効率よく読込む方法は?

    Borland C++ Builder 5 を使っています。 30万件以上のレコードが格納されたCSVファイルを読込むプログラムを作っています。 1件当りのレコード長は可変です。(MAX値は余裕を見て200バイトくらい。) 1件ごと決められた処理をする必要がありますので、次のようなソースを書きました。 while(fgets(buf,200,fp31) != NULL){ //CSVの分解とデータ処理 } しかし、さすがに30万件は時間がかかります。 まとめてドッカンと読込む方法もあろうかと思うのですが、1件ごと処理をするためにはどうしたら良いか分かっていません。 何かうまい方法はないものでしょうか? ご指導いただければ幸いです。

  • ワイド文字のバイト数が取得できず困っています。

    ワイド文字のバイト数を求めたいのですが、文字数しか取得することが出来ません。 ワイド文字のバイト数を取得する事は出来ないのでしょうか? Visual C++ 2008 Express Edhition の デバックモードで動かしています。 ****************************** wchar_t s[256]; s = L"abcあいう"; int len = wcslen(s); ******************************

  • Visual Studio.NETについて

    Visual Studio.NETをダウンロードしたのですが、使い方がいまいちわかりません。 初心者にもわかる使い方の本やサイトでお勧めなものはありませんか? ぜひ教えてください。

  • 何も書いて無いのに警告が出るだろうか

     プログラム解析のため10個ぐらいのC言語ファイルで 出来たソフトをビルドしたのですが、次の警告が最初の ファイル以外に対して、それぞれ出ます。 >C1300 (W) Command parameter specified twice > 同じコンパイラオプションを2度以上指定しています。 >同じコンパイラオプションの中で最後に指定したものを >有効とします。  define 等が2度以上書かれているのかなと思い、あるファイル の中身を全て削除しました。中身が空なだけでファイルは消して いません。  それなのに、そのファイルに対して上の警告が出ます。  この警告は何でしょう。何も書いて無いのにこのような警告が 出るのでしょうか。  宜しくお願いします。

  • 配列の計算の仕方

    Memo1には   Memo2には  5        3  6        4  7        9  8        8  9        3 10        8 と、書かれてありこのメモ帳二つの平均値を配列としてMemo3に   4   5   8   6   9 というように出したいのですが、どのようにすればよいのでしょうか・・ Cに関して全然わかっていないので、どなたか形だけでもアドバイス お願いします。

  • 配列とポインタの違いについて

    書籍などで配列とポインタの違いについて勉強していますが、未だによくわかりません。 C言語における配列とポインタの違いについて教えて頂けますでしょうか?

  • Visual C++ 2008 Express Editionsで作成されたエグゼファイルを他のPCで実行できない。

    こんにちわ。 私は、WindowsXPでVisual C++ 2008 Express Editionsでフォームを使用したアンケートで、回答結果をcsvファイルで出力するようなエグゼを作成しました。このエグゼを他のパソコン(OSはWindows)で実行できるのか試したのですが、できせんでした。実行するパソコンにVisual C++ 2008 Express Editionsが入っていないといけないのでしょうか?そうだとしたら、どのパソコン(OSがWindowsの場合のみ)でも実行することができるようになる方法はありますか?どうかご教授願います。