gpt4 book ai didi

c - 文件输出在输出的开头显示加密图像?

转载 作者:行者123 更新时间:2023-11-30 20:17:52 24 4
gpt4 key购买 nike

程序应该显示一个菜单,用户通过选择指定的数字来做出选择。

程序运行良好,但是当读取文件内容时,它以一些 cryptec 符号开始,然后显示文件内容。我尝试了所有解决方案,例如使用文件的其他 reding 函数,但结果相同

为什么显示这些符号?它们来自哪里?

The image below explain the encryptec symbols in the begining of the output

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
//functions protoype
void Menu(FILE *file);
void Add_Number(FILE*file);
void Show_Numbers(FILE *file);
void Search_Number(FILE *file);


//Define a struct
typedef struct {
char firstName[20];
char lastName[20];
unsigned long number ;
}person;


//Main program
int main()
{
FILE *file = NULL;
//file = fopen("contacts.txt", "a+");
Menu(file);
return 0;
}


void Add_Number(FILE *file)
{
person newUser;

file = fopen("contacts.txt", "a");
if (file != NULL)
{
printf("NOM:\n");
scanf("%s",newUser.firstName);
fflush(stdin);

printf("Prenom:\n");
scanf("%s",newUser.lastName);
fflush(stdin);

printf("Numero:\n");
scanf("%lu",&(newUser.number));
fflush(stdin);

fprintf(file, "\n%s\t%s\t%lu", newUser.firstName, newUser.lastName, newUser.number);
fflush(stdin);
printf("Success");

}

else
{
printf("Erreur d'ouverture de fichier");
exit(-1);
}
fclose(file);
}


void Show_Numbers(FILE*file)//FILE *file)
{
person user;
char s[100];
file = fopen("contacts.txt", "a+");
printf("%s", user.firstName);

if (file != NULL)
{
fseek(file,1,0);
while (fgets(s,1000,file)!=NULL)
{
printf("%s",s);
}


//while (fgets(test, 100, file) != NULL /*EOF*/) // On lit le fichier tant qu'on ne reçoit pas d'erreur (NULL)
/* {
printf("%s\n", test); // On affiche la chaîne qu'on vient de lire
}*/

fclose(file);


/*
fg(file, "%s %s %lu\n", test);//, user.lastName, user.number);
printf("Nom: %s\t\t", test);//user.firstName);
// printf("Prenom: %s\t\t", user.lastName);
// printf("Numero: %lu\n", user.number);*/


}
else
{
printf("Erreur d'ouverture de fichier");
exit(-1);
}
fclose(file);
}


void Search_Number(FILE *file)
{
file = fopen("contacts.txt", "a+");
char userToFined[20];
person user;
//test if file not NULL
if(file != NULL)
{
//input
puts("saisir le numero a chercher\n");
gets(userToFined);

//read from the begging
rewind(file);
do
{
fscanf(file, "%s %s %lu", user.firstName, user.lastName, &user.number);
}
while (user.firstName != userToFined && !feof(file));

if(user.firstName == userToFined)
{
printf("Success ! %s est trouve\n", user.firstName);
printf("Son est prenom: %s\t\t", user.lastName);
printf("Son numero est: %lu\n", user.number);
}
else
{
printf("%s est introuvable", userToFined);
}
}
else
{
printf("Erreur d'ouverture de fichier");
exit(-1);
}
fclose(file);
}


void Menu(FILE *file)
{
int choice;
do
{
puts("\n************************************************************\n\t\t BIENVENUE \t\t\n************************************************************");
puts("\t \t **Choisir votre choix**\t \t\n");
puts("---1--- Ajouter un nouveau contact\n");
puts("---2--- Afficher le repertoire\n");
puts("---3--- rechercher un numero\n");
puts("---4--- Ajouter un nouveau contact\n");
puts("Votre Choix:");
scanf("%d", &choice);

switch (choice)
{
case 1:
Add_Number(file); // Add user
break;
case 2:
Show_Numbers(file); //Show repository
break;
case 3:
Search_Number(file); //Search User
break;
case 4:
exit(0);
break;
default:
printf("Choix Invalid");
break;
}

} while (choice != 4);
}

最佳答案

函数 Show_Numbers() 有许多问题:

void Show_Numbers(FILE*file)  //<<< WHY IS file AN ARGUMENT?
{
person user; // <<<< DELETE THIS
char s[100];
file = fopen("contacts.txt", "a+"); // <<<< OPEN FOR READ-ONLY
printf("%s", user.firstName); // <<<< DELETE THIS

变量user已初始化,然后仅在尝试打印初始化值时使用。因此,指示的两行没有任何作用,并且是垃圾输出的原因。

该文件已打开以进行追加,但从未写入。

如果您在本地打开和关闭文件,则将 file 作为参数传递没有任何意义。使用:

     FILE* file = fopen( "contacts.txt", "r" ) ;

相反,并且不传递任何参数。

然后:

     while (fgets(s,1000,file)!=NULL)
{
printf("%s",s);
}

您正在将 1000 个字符的 block 读取到一个 100 个字符的数组中。

最后但不太重要的是,在函数结束时,您不必要地关闭了函数之前已关闭的文件。

  fclose(file);
}

关于c - 文件输出在输出的开头显示加密图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55874740/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com