C言語のプログラムのエラーについて教えてください

このQ&Aのポイント
  • C言語のプログラムでfatal error C1083が発生した際の原因と解決方法を教えてください
  • ディレクトリの一覧を調べるC言語プログラムでエラーが発生しています。原因を教えてください
  • C言語プログラムでincludeファイルが開けないエラーが発生しています。なぜこのエラーが生じるのか教えてください
回答を見る
  • ベストアンサー

C言語のプログラムのエラーについて教えてください

ディレクトリの一覧を調べるようなプログラムを組みました。 参考にしたURLはhttp://q.hatena.ne.jp/1118121349です。 しかし、fatal error C1083: include ファイルを開けません。'stdafx.h': No such file or directoryとエラーが発生しました。 なぜ、エラーが生じているのか教えていただけないでしょうか? よろしくお願いします #include <stdafx.h> #include <windows.h> #include <stdio.h> int main(int argc, char* argv[]) { char dir[512]/*カレントディレクトリ*/,wc[512]/*ワイルドカード付文字列*/; HANDLE hSearch; //見つかったファイルのハンドル WIN32_FIND_DATA fd; //検索データ ::GetCurrentDirectory(512,dir); //カレントディレクトリ取得 wsprintf(wc,”%s¥¥*.*”,dir); //ワイルドカード作成 hSearch=::FindFirstFile(wc,&fd); //最初の検索で使用する関数 if(hSearch!=INVALID_HANDLE_VALUE){ //ファイルが見つかったら次の処理 do{ if(strcmp(fd.cFileName,”.”)&&strcmp(fd.cFileName,”..”)){ //カレントフォルダ、親フォルダは無視 if(fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY ){ printf(”%s¥¥¥n”,fd.cFileName); //ファイルがディレクトリなら表示に”¥”をつける } else{ printf(”%s¥n”,fd.cFileName); //ファイルならそのまま表示 } } } while(::FindNextFile(hSearch,&fd)); //ファイルがなくなるまで継続 } FindClose(hSearch); //ハンドルを閉じる return 0; }

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

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

>しかし、fatal error C1083: include ファイルを開けません。'stdafx.h': No such file or directoryとエラーが発生しました。 >なぜ、エラーが生じているのか教えていただけないでしょうか? そりゃ~もちろん、そんなファイルがないから…でしょう。 VCのウィザードでプロジェクトを作成して、「プリコンパイルヘッダーを使用する」にした場合に、 「プロジェクトのディレクトリに」"stdafx.h"と"stdafx.cpp"が作成されます。 自前で一から書いたなら存在しないでしょう。明示的に作成しない限りは。 で、システムの方に入るワケではないので、 #include <stdafx.h> は誤りで #include "stdafx.h" とすべきです。 # ファイルの検索順の問題なので、前者でもエラーにはならないでしょうが…思わぬファイルがインクルードされる可能性は残ります。 いずれにしろファイルがなければエラーですが。

saterain20
質問者

お礼

ありがとうございます。よくわかりました。1から書いていきます

関連するQ&A

  • プログラムの間違いについて

    以下のプログラムはカレントディレクトリ内のCSVファイルの一覧を取得するプログラムを書いています。main関数内のprintfでファイル一覧を表記させたいと考えています。 カレントディレクトリに4つのCSVファイルあったとします。 1.csv 2.csv 3.csv 4.csvとします。 foo関数で a[0]=1.csv a[1]=2.csv a[2]=3.csv a[3]=4.csvと格納されたとします。 ですが、main関数内のprintfでは a[0]=4.csv a[1]=4.csv a[2]=4.csv a[3]=4.csv として表記されてしまいます。 main関数内で a[0]=1.csv a[1]=2.csv a[2]=3.csv a[3]=4.csv として表記するにはどうしたらいいのでしょうか? また、foo関数内でのprintfを行わないとmain関数内での表記が添付画像のように文字化けしますこの理由はなぜでしょうか? もしわかるかたがいましたら教えていただけないでしょうか? よろしくお願いします。 ここから記述したプログラムです。デバックすれば動きます。 #include <stdio.h> #include <windows.h> #include <string> #include<conio.h> using namespace std; char *a[10]; long n; void foo( int cnt, const string dirname ) { WIN32_FIND_DATA fd; HANDLE h; // ハンドルを取得する h = FindFirstFileEx( ( dirname + "*.csv" ).c_str(), FindExInfoStandard, &fd, FindExSearchNameMatch, NULL, 0 ); if ( INVALID_HANDLE_VALUE == h ) { printf( "ディレクトリ %s でエラー\n", dirname.c_str() ); return ; } n=0; do { printf( "%s\n", fd.cFileName ); a[n]=fd.cFileName; //printf("%s\n", a[n]); n=n+1; // 次のファイルを検索する } while ( FindNextFile( h, &fd ) ); // ハンドルを閉じる FindClose( h ); } int main() { foo( 0, ".\\" ); for(n=0; n<4; n++) { printf("%s\n", a[1]); } getch(); return 0; }

  • [C++]WCHARの1文字目しか表示できない

    あるWebサイトによると以下のプログラムでディレクトリ内の ファイル一覧を表示できるそうだ。たしかにファイル一覧を 表示できた。しかし、わたしの電子計算機上では、 ファイル名の1文字目しか表示できない。 なおfd.cFileNameはWCHARという配列のようだ。fd.cFileName[2]のように 文字位置を指定すれば、1文字目以降を取得できる。 Windows XP SP3 Visual C++ 2008 Express Edition ーーーーーーーーーーーーーーーーーーーーーーーーー #include <stdio.h> #include <string> #include <iostream> #include "windows.h" using namespace std; int main(int argc, char *argv[]) { HANDLE hFind; WIN32_FIND_DATA fd; FILETIME ft; SYSTEMTIME st; wstring FName; FName = L"*.*"; /* 最初のファイル検索 */ hFind = FindFirstFile(FName.c_str(), &fd); /* 検索失敗? */ if(hFind == INVALID_HANDLE_VALUE) { printf("検索失敗\n"); return(0); /******** エラー終了 ********/ } while(FindNextFile(hFind, &fd)){ FileTimeToLocalFileTime(&fd.ftLastWriteTime, &ft); FileTimeToSystemTime(&ft, &st); printf("ファイル名: %s", fd.cFileName); if(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { printf("(ディレクトリ)"); } printf("\n短いファイル名: %s\n", fd.cAlternateFileName); printf("ファイルサイズ: %d\n", fd.nFileSizeLow); printf("更新日: %04d/%02d/%02d %02d:%02d:%02d\n\n",st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond); } /* 検索終了 */ FindClose(hFind); return(0); }

  • C言語のプログラムについてご指導願えますか?

    ファイルを読み込み、そのなかにI,We,You,He,She,Theyの単語がいくつかるかカウントするプログラムを作成したいのですが、単語のカウントがうまくできません。 下記に作成したソースを記載しますので、間違っている箇所を指摘していただけませんか? #include <stdio.h> #include <stdlib.h> #include <string.h> int main( void ) { char filename[FILENAME_MAX]; int j=0; int k=0; int l=0; int m=0; int n=0; int o=0; FILE *fp; gets(filename); fp = fopen(filename,"r"); { if(fp==NULL) { printf("ERROR"); return -1; } if(strcmp("I",fp)==0) { j++; } if(strcmp("We",fp)==0) { k++; } if(strcmp("You",fp)==0) { l++; } if(strcmp("He",fp)==0) { m++; } if(strcmp("She",fp)==0) { n++; } if(strcmp("They",fp)==0) { o++; } } printf("I: %d\n",j); printf("We: %d\n",k); printf("You: %d\n",l); printf("He: %d\n",m); printf("She: %d\n",n); printf("They: %d",o); fclose(fp); return 0; }

  • [C言語]トラバースするプログラム(linux)

    linux(ubuntu11.04)でコマンドラインからもらったディレクトリをトラバースするプログラムを作りたいんですがうまくいきません。 一応書けたのですがどうも予想と違う動きをしてしまいます。 #include<stdio.h> #include<stdlib.h> #include<sys/types.h> #include<sys/stat.h> #include<dirent.h> #include<string.h> static void do_traverse(char *patht, int t); int main(int argc, char *argv[]) { int i; if(argc<2) { fprintf(stderr,"%s: no arguments\n",argv[0]); exit(1); } for(i=1;i<argc;i++) { do_traverse(argv[i],0); } return 0; } static void do_traverse(char *path, int t) { DIR *d; struct dirent *ent; int i; d=opendir(path); if(!d) { perror(path); exit(1); } while((ent=readdir(d))!=NULL) { struct stat st; if(lstat(ent->d_name,&st)<0) { perror(ent->d_name); exit(1); } for(i=0;i<t;i++) { printf(" "); } printf("%s\n",ent->d_name); if((strcmp(".",ent->d_name))==0 || (strcmp("..",ent->d_name))==0 || S_ISLNK(st.st_mode)) { continue; } if(S_ISDIR(st.st_mode) && !S_ISREG(st.st_mode)) { do_traverse(ent->d_name,t+1); } } closedir(d); } 例えばディレクトリaにファイルbとディレクトリcがあり、ディレクトリcの中にはファイルdとディレクトリeがあり、ディレクトリeの中にはファイルfがあるとします。 僕の理想では $./traverse a とすると .. . b c .. . d e .. . f となるはずなんですが(表示の順番は適当です)、実際は b .. . c となってしまいうまくトラバースしてくれません どうしてこうなるかわかりません 誰か助けてください お願いします

  • C言語

    *.cファイルを検索するんですがmain.cのファイルだけを検索しないようにするにはどう付け加えればいいでしょうか? void DoFind() { HANDLE hFind; WIN32_FIND_DATA fd; FILETIME ft; SYSTEMTIME st; /* 最初のファイル検索 */ hFind = FindFirstFile("*.c", &fd); /* 検索失敗? */ if(hFind == INVALID_HANDLE_VALUE) { printf("検索失敗\n"); return; /******** エラー終了 ********/ } do { /* 結果の表示 */ printf("ファイル名: %s", fd.cFileName); } while(FindNextFile(hFind, &fd)); '次のファイルを検索 /* 検索終了 */ FindClose(hFind); }

  • C言語 ファイル検索

    ファイルを検索するときなんですが*.cのファイルを検索するには下のように書くんですが、*.exeのように2種類のファイルを検索すにはどう付け加えればいいでしょうか? void DoFind() { HANDLE hFind; WIN32_FIND_DATA fd; FILETIME ft; SYSTEMTIME st; /* 最初のファイル検索 */ hFind = FindFirstFile("*.c", &fd); /* 検索失敗? */ if(hFind == INVALID_HANDLE_VALUE) { printf("検索失敗\n"); return; /******** エラー終了 ********/ } do { /* 更新時間取得 */ FileTimeToLocalFileTime(&fd.ftLastWriteTime, &ft); FileTimeToSystemTime(&ft, &st); /* 結果の表示 */ printf("ファイル名: %s", fd.cFileName); if(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { printf("(ディレクトリ)"); } printf("\n短いファイル名: %s\n", fd.cAlternateFileName); printf("ファイルサイズ: %d\n", fd.nFileSizeLow); printf("更新日: %04d/%02d/%02d %02d:%02d:%02d\n\n", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond); } while(FindNextFile(hFind, &fd)); '次のファイルを検索 /* 検索終了 */ FindClose(hFind); }

  • C言語について教えてください

    ファイルの文を読み込み、I、Weなどの定めた単語の数を数えるプログラムを作りたいのですが、うまくいきません。 具体的な問題点は、単語の数を数える際、一致する単語があった場合、再び最初から文を見直すため、無限ループしてしまう。 We,WE、weなど大文字小文字の違いで単語が数えられないなどです。 #include <stdio.h> #include <stdlib.h> #include <string.h> int main( void ) { char filename[FILENAME_MAX]; int j=0; int k=0; int l=0; int m=0; int n=0; int o=0; int w; char str[50]; FILE *fp; gets(filename); fp = fopen(filename,"r"); { if(fp==NULL) { printf("ERROR"); return -1; } } fscanf(fp,"%50s",str); for(w=0;w<=j+k+l+m+n+o;w++) { if(strcmp("I",str)==0) { j++; } if(strcmp("We",str)==0) { k++; } if(strcmp("You",str)==0) { l++; } if(strcmp("He",str)==0) { m++; } if(strcmp("She",str)==0) { n++; } if(strcmp("They",str)==0) { o++; } } printf("I: %d\n",j); printf("We: %d\n",k); printf("You: %d\n",l); printf("He: %d\n",m); printf("She: %d\n",n); printf("They: %d",o); fclose(fp); return 0; }

  • C言語 strcmp 半角スペースがあるとだめ?

    C言語 strcmp 半角スペースが文字列に含まれている場合 文字列の比較がうまくいきません。半角スペースがあると比較できないのでしょうか? プログラム //strcmp #include <stdio.h> #include <string.h> int main(void){ char input[256]; char str[] = "HelloWorld!";   //char str[] = "Hello World!";だとうまくいかない。 printf("%s\n>", str); scanf("%s", input); if ( strcmp(input, str) == 0){ printf("同じです。\n"); }else{ printf("違います。\n"); } return 0; }

  • strcmp( finddata.cFileName, "." )

    http://www.ne.jp/asahi/oh/landd/prog_html/prog23.html 上記のサイトに  strcat( dir_cpy, "\\*" );  search = FindFirstFile( dir_cpy, &finddata );  if( search != INVALID_HANDLE_VALUE ){   // 現在のディレクトリ(フォルダ)と親ディレクトリは排除   if( strcmp( finddata.cFileName, ".." ) != 0 && strcmp( finddata.cFileName, "." ) != 0 ){    ………   }   while( FindNextFile( search, &finddata ) != 0 ){ このような意味のソースが有りますが、コメントの行位置では finddata.cFileName が "." 以外になったことがありません。 そのため、いつも if は偽で、 ……… の部分が実行されません。 どういう場合に ……… の部分の処理がされるんですか?

  • C言語 コンパイルできるが実行するとエラー

    非負の数字を入力してもらい表示させ、数字以外を入力した場合は終了するプログラムです↓(VC使用) ━━━━━━━━━━━━━━━━━━━━━━━━━━ #include "stdafx.h" #include <stdio.h> #include <stdlib.h> /* atoi使用 */ #include <ctype.h> /* isdigit使用 */ int main(void) {   char cx;   int nx;   printf("非負の整数を入力してください。:");   scanf("%s", cx);   if(isdigit(cx) == 0){     printf("数字を入れてください。\n");   }else{     nx = atoi((const char*) cx);   }   printf("%d", nx);   return 0; } ━━━━━━━━━━━━━━━━━━━━━━━━━━ 実行し文字を入力するとDebug Error!と小窓がでます。どこがおかしいのでしょうか?