0

自分の名前を含む txt ファイルを読み取り、自分の名前を含む新しい txt ファイルを作成する必要がありますが、スペルが逆になります (John Doe は Doe, John になります)。私の割り当ては、変更されたtxtを保存するために一時的な配列を作成する必要があるかもしれないと言います。

警告が表示されます: 組み込み関数 'strchr' エラーの互換性のない暗黙の宣言です。この警告を受け取った場所を正確に確認できるように、コードに含めます。

これが私のコードです。ここで何が間違っていますか?私を助けてください。

#include <stdio.h>

int main (void)
{
FILE* txtFile=NULL;

txtFile=fopen("myName.txt", "r");

char myName [50]={'\0'};



if(txtFile==NULL)
{
    printf("Failed to open file\n");
}
else
{
    fgets(myName, sizeof(myName), txtFile);

    printf("%s\n", myName);
}

FILE* newTxtFile=NULL;

newTxtFile=fopen("myNewName.txt", "w+");

char newName[50]={'\0'};


if(newTxtFile==NULL)
{
    printf("Failed to open file\n");
}
else
{   
fgets(newName, sizeof(newName), newTxtFile);

fprintf(txtFile, "%s", newName);

rewind(newTxtFile);
//
char * space;
char *first=NULL;
char *last = NULL;
char *firstspace;
char *name=NULL;

name = myName;
//incompatible implicit declaration of built-in function 'strchr'
firstspace=space=strchr(name,' ');

*firstspace='\0';

while (space!=NULL)
{
    last = space+1;
    space=strchr(space+1,' ');
}

printf("%s %s", last, name);

*firstspace=' ';
//
printf("text: %s \n", newName);
}
fclose(txtFile);

return 0;
}   
4

2 に答える 2

1

あなたのコードには無駄ながらくたがたくさんありました。

新しいファイルに何もない理由は、前のファイルに新しいデータを再度書き込んでいるためです

ここを見てください:

fprintf(txtFile, "%s", newName);



#include <stdio.h>
#include <string.h>

int main (void)
{
FILE* txtFile=NULL;

txtFile=fopen("helloWorld.txt", "r");

char myName [50]={'\0'};



if(txtFile==NULL)
{
    printf("Failed to open file\n");
}
else
{
    fgets(myName, sizeof(myName), txtFile);

    printf("%s\n", myName);
}

FILE* newTxtFile=NULL;

newTxtFile=fopen("myNewName.txt", "w+");

char newName[200]={'\0'};


if(newTxtFile==NULL)
{
    printf("Failed to open file\n");
}
else
{
fgets(newName, sizeof(newName), newTxtFile);


rewind(newTxtFile);
//
char * space;
char *first=NULL;
char *last = NULL;
char *firstspace;
char *name=NULL;

name = myName;
//incompatible implicit declaration of built-in function 'strchr'
firstspace=space=strchr(name,' ');

*firstspace='\0';

while (space!=NULL)
{
    last = space+1;
    space=strchr(space+1,' ');
}

printf("%s %s", last, name);
/* my changes start here*/
strcat(newName,last);


strcat(newName," ");


strcat(newName,name);

printf("%s", newName);

fprintf(newTxtFile, "%s", newName);






}
fclose(txtFile);
fclose(newTxtFile);

return 0;
}
于 2013-10-18T15:33:16.693 に答える
1

まず、あなたがする必要があります

出力ファイルの処理方法は少し奇妙です。

出力用に開く必要があります ("w")。

次の 3 行を削除します。

fgets(newName, sizeof(newName), newTxtFile);

fprintf(txtFile, "%s", newName);

rewind(newTxtFile);

次に、画面上の印刷場所のすぐ隣にある新しいファイルに出力を印刷する行を追加します。

fprintf(newTxtFile, "%s, %s", last, name); 

そして最後に、最初に追加します

#include <string.h>

のプロトタイプを取得しstrchrます。

それはそれを行う必要があります!

于 2013-10-18T15:30:34.147 に答える