在尝试创建一个函数将一些结构字段写入名为"providers.txt"
的文件时,我遇到了这个奇怪的问题,该结构有三个fields: char code[5], char name[50] and char phone[12]
。
另外,我必须遵循这种i / o格式:
input:
code: TEST
name: Jordan Maker
phone: 02418380828
output(in file):
TEST<tab>(0241) 838.08.28<tab>Jordan Maker
当我使用load(field filling)
函数测试时,数据printProvider
就可以了,所以不是导致问题的结构。
这是功能:
int saveProviderinFile(Provider p, FILE *out)
{
int i;
out = fopen("providers.txt", "w");
if(out == NULL) return 0;
else
{
fprintf(out, "%s\t(", p.code);
for(i=0; i<=3;i++)fprintf(out, "%c", p.phone[i]);
fprintf(out, ") ");
for(i=4; i<=6;i++)fprintf(out, "%c", p.phone[i]);
fprintf(out, ".");
for(i=7; i<=8;i++)fprintf(out, "%c", p.phone[i]);
fprintf(out, ".");
for(i=9; i<=10;i++)fprintf(out, "%c",p.phone[i]);
fprintf(out, "\t%s\n", p.name);
return 1;
}
}
不介意返回值,只是为了验证文件打开是否成功。
providers.txt
中的结果如下所示:
TEST()..约旦规则
正如您所看到的,它不会在文件中打印手机,但它会在控制台中打印,即使我说的是fprintf
而不是printf
。
我是stackoverflow的新手,所以如果我在问题格式中犯了一些错误,请原谅。原谅我的坏英语。
提前致谢!
编辑:这是填充程序。
void buildProvider(Provider *p, char code[], char name[], char phone[])
{
strcpy(p->code, code);
strcpy(p->name, name);
strcpy(p->phone, phone);
}
这是打印程序,打印格式很好:
void printProvider(Provider p)
{
int i;
if(strcmp(p.code, "0000") != 0)
{
printf("%s\t(", p.code);
for(i=0; i<=3;i++)printf("%c", p.phone[i]);
printf(") ");
for(i=4; i<=6;i++)printf("%c", p.phone[i]);
printf(".");
for(i=7; i<=8;i++)printf("%c", p.phone[i]);
printf(".");
for(i=9; i<=10;i++)printf("%c", p.phone[i]);
printf("\t%s\n", p.name);
}
else
{
printf("Provider not found\n");
}
}