私はまだC言語の入門を学んでいます。現在、コードに問題があります。タスクは、ユーザーにスタッフに関する情報を入力してテキスト ファイルに書き込むように求めることです。問題は次の場合に発生します。
1) text/.exe ファイルの出力にランダムな文字が表示されます。
2) 新しい出力により、text/.exe ファイル内の既存の情報が上書きされます。
3) テキストファイルのスタッフ情報を初めて削除した後、削除機能が正しく削除できません。
これら3つの問題のいずれかを解決できれば、とてもうれしいです:)
コードは次のとおりです。
#include <stdio.h>
#include <stdlib.h>
void Menu();
void New_Staff();
void Delete_Staff();
void Export_Profile();
struct element{
char id[20];
char name[20];
char gender[20];
char phone[20];
char email[20];
}profile;
int main(void){ //The program will continue running until option 4 selected
int a;
for(a=0;;a++){
Menu();
}
return 0;
}
void Menu() //Main Menu to select option
{
int n;
printf("\n**********************************************");
printf("\nMAIN MENU-STAFF INFORMATION SYSTEM");
printf("\n**********************************************");
printf("\n1. Add profile Staff Profile");
printf("\n2. Delete Staff Profile");
printf("\n3. Export All Profiles to 'output.txt'");
printf("\n4. Exit");
printf("\n**********************************************");
printf("\nPlease enter your option< 1 / 2 / 3 / 4 >: ");
scanf("%d", &n);
switch(n){
case 1:
New_Staff();
break;
case 2:
Delete_Staff();
break;
case 3:
Export_Profile();
break;
case 4:
printf("\n*** Thanks for using the program! Goodbye. ***");
exit(0);
break;
default:
printf("\nError! Wrong Number is Entered\nPlease Try Again");
break;
}
}
void New_Staff() //Add New Staff Profile
{
int x;
struct element profile;
printf("\n===Add New Staff Profile===");
printf("\n\nPlease enter the following staff information.");
printf("\n\nStaff ID: ");
scanf("%s", &profile.id);
printf("Name\t: ");
fflush(stdin);
fgets(profile.name,20,stdin);
for(x=0 ; x<20 ; x++)
{
if(profile.name[x] == '\n')
profile.name[x] = '\0';
}
printf("Gender\t: ");
scanf("%s", &profile.gender);
printf("Phone\t: ");
scanf("%s", &profile.phone);
printf("Email\t: ");
scanf("%s", &profile.email);
printf("\nSYSTEM: New Staff Profile is Added Successfully.");
}
void Delete_Staff() //Delete Staff Profile
{
FILE *fRead, *fWrite;
char *TextFile;
char c;
int Delete_Id, temp = 1;
TextFile="output.txt";
fRead = fopen(TextFile, "r");
c = getc(fRead);
while (c != EOF){
printf("%c", c);
c = getc(fRead);
}
rewind(fRead);
printf("\nDelete Staff with ID: ");
scanf("%d", &Delete_Id);
Delete_Id=Delete_Id+1;
fWrite = fopen("copy.c", "w");
c = getc(fRead);
while (c != EOF) {
c = getc(fRead);
if (c == '\n')
temp++;
if (temp != Delete_Id){
putc(c, fWrite);
}
}
fclose(fRead);
fclose(fWrite);
remove(TextFile);
rename("copy.c", TextFile);
printf("\nThe contents of file after being modified are as follows:\n");
fRead = fopen(TextFile, "r");
c = getc(fRead);
while (c != EOF) {
printf("%c", c);
c = getc(fRead);
}
fclose(fRead);
}
void Export_Profile() //Export Staff Profile to Text
{
struct element profile;
FILE *fPtr;
fPtr=fopen("output.txt","w");
FILE *fPtr1;
fPtr1=fopen("output.txt","a+");
if (fPtr == NULL)
printf("Error in opening file\n");
if (fPtr1 == NULL)
printf("Error in opening file\n");
fprintf(fPtr,"%10s %10s %10s %10s %10s","Staff","ID",
"Name","Gender","Phone","Email");
fprintf(fPtr1,"\n%10s %10s %10s %10s %10s", profile.id, profile.name,
profile.gender, profile.phone, profile.email);
printf("\n%10s %10s %10s %10s %10s", "Staff", "ID", "Name",
"Gender", "Phone", "Email");
printf("\n%10s %10s %10s %10s %10s", profile.id,
profile.name, profile.gender, profile.phone, profile.email);
printf("\nSYSTEM: All staff profile have been exported to output.txt file");
fclose(fPtr);
fclose(fPtr1);
}
長いコードで申し訳ありません。問題がどこにあるのかよくわかりません。
出力は次のようになります。
**********************************************
MAIN MENU-STAFF INFORMATION SYSTEM
**********************************************
1. Add profile Staff Profile
2. Delete Staff Profile
3. Export All Profiles to 'output.txt'
4. Exit
**********************************************
Please enter your option< 1 / 2 / 3 / 4 >: 1
===Add New Staff Profile===
Please enter the following staff information.
Staff ID: 1
Name : Carmen Gray
Gender : Female
Phone : 123-4567890
Email : carmen@live.com
SYSTEM: New Staff Profile is Added Successfully.
**********************************************
MAIN MENU-STAFF INFORMATION SYSTEM
**********************************************
1. Add profile Staff Profile
2. Delete Staff Profile
3. Export All Profiles to 'output.txt'
4. Exit
**********************************************
Please enter your option< 1 / 2 / 3 / 4 >: 3
Staff ID Name Gender Phone
°²# @Γg╕∙ ∙
SYSTEM: All staff profile have been exported to output.txt file
**********************************************
MAIN MENU-STAFF INFORMATION SYSTEM
**********************************************
1. Add profile Staff Profile
2. Delete Staff Profile
3. Export All Profiles to 'output.txt'
4. Exit
**********************************************
Please enter your option< 1 / 2 / 3 / 4 >: 2
Staff ID Name Gender Phone
°²# @Γg╕∙ .
Delete Staff with ID: 1
The contents of file after being modified are as follows:
Staff ID Name Gender Phone
テキストファイルには次のように表示されます。
Staff ID Name Gender Phone
øý# @âg¸ù ù