我想把数据存储在位置上,但每当我运行代码时,它给我的信息是 fp 是未申报的。我想 fp 在另一个函数中工作。如何做到这一点?
#include <stdio.h>
#include <stdlib.h>
#define MAX 15
int new_acc(char *name, size_t namesize);
int list_view(char *name);
int main(){
FILE *fp;
fp = fopen("/home/Documents/file.txt","w"); /* this is fp */
int one='1', two='2';
char choice[MAX], name[15] = "";
do{
printf("%c. Create new account\n",one);
printf("Enter your choice: ");
fgets(choice, sizeof choice, stdin);
if (choice[0] == one)
{new_acc(name, sizeof name);}
}
while(two != choice[0]);
return 0;}
int new_acc(char *name, size_t namesize){
printf("Enter your name: ");
fgets(name, namesize, stdin);
fputs(name, fp);
fclose(fp);
return 0;}
int new_acc(char *name, size_t namesize)
改成。
int new_acc(FILE * fp, char *name, size_t namesize)
然后当你在main中调用这个函数时
new_acc(fp, name, sizeof name);
你应该检查这个函数的返回值 fopen
:
fp = fopen("/home/Documents/file.txt","w");
if(!fp) {
// handle the error.
}
你该走了 fclose(fp)
出这个功能。
OT,你应该把类型。
int one='1', two='2';
改成 char one='1', two='2';
因为你把这些变量与 char
值。
针对评论中的问题进行了更新。
#include <stdio.h>
#include <stdlib.h>
#define MAX 15
int new_acc(FILE *fp, char *name, size_t namesize);
int main(){
FILE *fp;
fp = fopen("file.txt","w"); /* this is fp */
if(!fp) {
printf("cannot open the file");
return -1;
}
char one='1', two='2';
char choice[MAX], name[15] = "";
char all_accouts[100][15];
int i = 0;
do{
printf("%c. Create new account\n",one);
printf("Enter your choice: ");
fgets(choice, sizeof choice, stdin);
if (choice[0] == one)
{new_acc(fp, all_accouts[i], sizeof(all_accouts[i])); i++;}
}
while(two != choice[0]);
for(int j = 0; j < i; j++) {
printf("%s\n", all_accouts[j]);
}
fclose(fp);
return 0;
}
int new_acc(FILE *fp, char *name, size_t namesize) {
printf("Enter your name: ");
fgets(name, namesize, stdin);
fputs(name, fp);
return 0;
}
测试的输出。
1. Create new account
Enter your choice: 1
Enter your name: name1
1. Create new account
Enter your choice: 1
Enter your name: name2
1. Create new account
Enter your choice: 2
name1
name2
修改以下一行
int new_acc(char *name, size_t namesize);
到
int new_acc(char *name, size_t namesize, FILE *fp);
因为文件指针会很方便--另外--也许为这个变量选择一个更好的名字吧
变化
{new_acc(name, sizeof name);}
到
{new_acc(name, sizeof name, fp);}
由于这将是必要的
变化
int new_acc(char *name, size_t namesize){
至
int new_acc(char *name, size_t namesize, FILE *fp){
匹配上面和 fp
在函数中需要
工作完成了!在主函数之外定义它,它应该是一个全局变量。
在主函数之外定义它,它应该是一个全局变量。