• ベストアンサー

_strdate関数について

日付を管理するプログラムを作っているのですが、 _strdateで取得した日付をtxtファイルにfputs関数で書き出し、 次回起動時にtxtファイルの内容をfgets関数で取得し、 それを_strdate関数で取得した日付と比較しているのですが、 同じ日付にもかかわらず、不一致となります。 どちらもchar型で宣言しているのですが・・・ なにか見落としてるのでしょうか? 教えてください。お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#30727
noname#30727
回答No.4

No.3 です。補足みましたが、8 文字限定なので、fgets とは直接関係ないようです。 >if(line==tmpbuf) 私からは、「この書き方では文字列の比較になりません」というヒントだけにしておきます。

fisland
質問者

お礼

strncmp関数で2つの文字列を比較したところ、 うまくいきました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

noname#30727
noname#30727
回答No.3

fgets は改行コードも取得するので、そのまま比較しているとしたら、うまくいきません。

fisland
質問者

補足

改行コード抜きで取得するにはどうすればよいのでしょう? ヒントだけでも教えてください。 けっこう自分で考えたりするのが好きなので。。。

全文を見る
すると、全ての回答が全文表示されます。
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

比較はどのような方法でされてますか? 出来ればその部分のソースを載せていただきたいのですが。

fisland
質問者

補足

初心者でして 人にソースを見せるのは恥ずかしいのですが・・・ よろしくお願いします。 FILE *instream; int i; char line[9]; char tmpbuf[9]; if( (instream = fopen( INFILE, "r" )) != NULL ) { fgets( line, 9, instream ); } fclose( instream ); _strdate( tmpbuf ); if(line==tmpbuf) i=1; else i=-1;

全文を見る
すると、全ての回答が全文表示されます。
  • asuca
  • ベストアンサー率47% (11786/24626)
回答No.1

_strdateとfgetsで得た文字列の最初の8文字だけを抜き出して比較してみてもだめですか?

fisland
質問者

補足

うまくいきません。 No.2の方のところにソースを抜き出してみました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ファイルオープンの関数について教えてください。

    住所録保守のプログラムの宿題なんですが、ファイルオープンを関数にせずには動かせるのですが、関数にするとエラーが山のようにでます。参考書もよんでるのですがよくわかりません。明日提出なのでよろしくお願いします。                                     関数にする前の考えたプログラムは、                                            struct aaa{ char b                                                       char  c            };                                                         FILE *fp; struct aaa[100]; if((fp=fopen("c:/a.txt","rt"))==NULL) exit(0);です。                                         宿題は f_open(char *name,char *mode) を使って指定されたファイルを指定されたモードで開くという関数を作りなさい。                                                     引数 ポインタ nameはファイル名/mode はオープンモード 戻り値なし という問題です。 よろしくお願いいたします。

  • 関数原型宣言について

    関数原型宣言について 下記のプログラムのfunc関数は、関数原型宣言 <func(int a, long b, char *c);>が述されていないのにfunc関数の仮引数の型longは、関数原型宣言が与えられるといると本に書かれていたのですが、何故でしょうか教えて頂きたい。 ******************************************** #include <stdio.h> /*--- 三つの引数を受け取る関数 ---*/ void func(int a, long b, char *c) { int x; long y; /* … */ } int main(int argc, char *argv[]) { int a = 1; char s[] = "abc"; func(a + 3, 2, s); return (0); } *************************************************************

  • fgets関数を使用したときの文字あふれについて

    fgets関数を用いて文字列を入力し、その長さを測るプログラムを作っています。 #include <stdio.h> #include <string.h> #define MAX 256 int main ( int, char *[] ); int main ( argc, argv ) int argc; char *argv[]; { char buf[( MAX )]; while ( 1 ){ memset ( buf, 0, sizeof( buf )); fgets ( buf, MAX, stdin ); if( fgets == NULL ){ break; } printf("入力した文字列の長さは%dです\n" ,strlen( buf )); } return 0; } このプログラムでは、256までしか文字列の長さを測ることができません。 もしこのプログラムで256を超える文字列を入力してしまうと、文字のあふれが発生し、 「入力した文字列の長さは256です」 「入力した文字列の長さは(あふれた文字列の長さ)です」 とこのようになってしまいます。 このプログラムで256以上の文字を読み捨てて、 「入力した文字列の長さは(あふれた文字列の長さ)です」 を表示しないようにできるのでしょうか? また読み捨てた文字列の長さを知ることはできるのでしょうか? もしかしたらfgets関数を使用すると不可能なのではないか?と思っています。 分かる方が居ましたらどうか教えて下さい。 よろしくお願いします。

  • fscanf関数のscanf集合を使う時の不具合

    こんにちは。 現在、C言語でプログラミングをしています。 最近気が付いたのですが、fgetc、fputc、fgets、fputs、fprintfといった関数は、 呼び出されるたびにファイルの現在位置を進めるのですが、 fscanf関数において、scanf集合を使った場合だけは、 何故かいつもファイルの先頭からスキャンを開始するようです。 例えば、適当なテキストファイルtest.txtを作成し、 ------------------------------------ FILE *fp; char str[80]; fp=fopen("test.txt", "r"); while(!feof(fp)){ fscanf(fp, "%[a-zA-Z]", str) puts(str); } ------------------------------------ といったコードブロックを試してみると、永遠にforループが終了せず、 最初の英単語が何回も画面に出力されます。 このコードブロックの目的は、test.txtから、英単語だけを取り出して、順番に出力していく事です。 上のコードブロックで、whileループの最後に、fseek(fp, srtlen(str), SEEK_CUR); といったコードを挿入し、ファイルの現在位置を手動で進めてみたのですが、 どうも上手く行きませんでした。 scanf集合は便利なので、fscanf関数で使っていきたいのですが、こういった不具合があるので困っています。 上のコードブロックを上手く動作させる方法だけでもいいので、何かアドバイスを頂きたいと思います。 では、よろしくお願い致します。

  • C言語のプログラム中に使うsystem()関数に変数を使う場合

    C言語のプログラム中に使うsystem()関数に変数を使う場合 system("sort < a.txt |uniq >aa.txt"); という関数を使うと テキストファイル a.txt は編集(sort,uniqにより)され aa.txt となるのですが このファイル名を変数として扱いたいので char str[255]; for(z=0; z<255; z++){ sprintf(str,"sort < %d.txt |uniq >0%d.txt", z, z); system(str); } という形にすると 0.txt → 00.txt 1.txt → 01.txt と255.txtまで編集されると思ったのですが 編集後のファイルが白紙で現れてしまいます。 system("sort < a.txt |uniq >aa.txt"); のファイル名に変数を扱い 複数のファイルの編集をするためには どのようなプログラムを作成すると良いのでしょうか? ご回答よろしくお願いいたします。

  • VBScript 日付の比較について

    ログファイルに下記のように記述されています。 2005/10/05 aaaa bbbb cccc ~ mmmmm dddd left関数を使用して日付だけを取得し、取得した値とdate関数で取得した値を比較(IF文)し、一致した時に処理を行いたいんですが、何故か比較されません。 msgboxで何が表示されているか確認したんですが、両方とも中身は2005/10/05となっています。 何が原因なんでしょうか? left関数で取得した値が日付と認識されていないのでしょうか?教えてください。

  • EXCEL COMMAND関数が使えない

    VBでは使えたCOMMAND関数がEXCELでは使えないことが判明しましたが、EXCELで読み込むTXTファイル名の中に店舗コードがあり、どうしてもCOMMAND関数で引数(店舗コード)を取得しないといけません。EXCELでCOMMAND関数に代わるものまたは、別プログラムからEXCELを起動したときに、店舗コード(変数)を取得する方法はありませんか? よろしくお願いします

  • ファイルの内容の削除【ファイルシステム関数】

    以下のユーザー定義関数で、POSTで受け取った数値の増減をあるファイルに書き換える作業をおこないたいのですが、1桁の数値であれば問題ないのですが、2桁の数値にし、マイナスの数値で減らすと値が「00」となってしまいます。文字列として認識してしまっているためかとは存じますが、良い解決方法が思い浮かびません。以下ソースです。 <? function cnt($str){ if(isset($_POST[$str])){ $fp = fopen( $str.".txt", "r+" ); flock($fp,2); $count = fgets( $fp, 5 ); $strstr = $_POST["$str"]; $count+= $strstr; rewind( $fp ); fputs( $fp, $count ); flock($fp,3); fclose( $fp ); print($count); }else{ $fp = fopen( $str.".txt", "r" ); $count = fgets( $fp, 5 ); print($count); };} ?> ファイルシステム関数については苦手で、うまく理解しきれていません。 アイデア・解決法をご存知の方がいらっしゃいましたら、ご回答いただければうれしいです。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • C言語の入出力関数の違い

    C言語を勉強しています。 自分が知っている入出力を行う関数は printf scanf fprintf fscanf sprintf sscanf gets puts getc putc fgets fputs fgetc fputc なのですがそれぞれのメリット・デメリットの違いがまだあいまいです。 というかまだ上の4つくらいしかまともに使ったことがありません。 自分の考えでは、 ・上の4つは書式を指定でき、ファイルから読み込みするときなどは fgetsよりもfscanfが使いやすいと思っています。 ・スペースを読み込みたいときはscanfではなくgetsを使わなければならない。 ・システム開発でscanfを使うことは危険なのでほとんどない。 間違った考え方をしていたり、どのようなデータのときに どの関数を使うのが正しい、常識、と知っている方いらっしゃいましたら 教えてください。

  • 関数が認識されません。

    以前VBで成分解析プログラムの作成について質問したものですが、以前の回答にあったとおりVBスプリクトで作成してたプログラムを参考に改良しようとしているのですが、ANDには「'.' が必要です。」とか Char = Asc(Mid(Text, StrIndex, 1))などに対して 「'Char' は型です。有効な式ではありません。」 「名前ABSは宣言されていません」(ってABSって絶対値関数ですよね?)というエラーが多数出ています。 どうすればよいのでしょうか?お教えいただけませんか?

外付けHDDの不具合
このQ&Aのポイント
  • 昨年の12月に購入した、TOSHIBAのレグザにつないでいる外付けHDDが録画が出来なくなりました。
  • HDD事態に問題は無いとの回答でしたが、再生中に停止ボタンを押すと、データが消えてしまいます。
  • テレビとHDDの相性の問題なのか、それとも初期不良なのか判明させたいです。
回答を見る