gpt4 book ai didi

c - 尝试将多个信息存储到文本文件时出错

转载 作者:太空宇宙 更新时间:2023-11-04 04:48:35 26 4
gpt4 key购买 nike

我正在尝试编写一个数据库来存储员工信息。这是我有问题的代码:

#include<stdio.h> 
int main(){
char name[100], gender[100], email[100], id[10], phone[20];
FILE *fPtr;
fPtr=fopen("staffinfo.txt","w");
FILE *fPtr1;
fPtr1=fopen("staffinfo.txt","a+");

if (fPtr == NULL)
printf("Error in opening file\n");
if (fPtr1 == NULL)
printf("Error in opening file\n");

printf("\n===Add New Staff Profile===");
printf("\n\nPlease enter the following staff information.");

printf("\n\nStaff ID: ");
scanf("%s", &id);

fflush(stdin);
printf("Name\t: ");
fgets(name,100,stdin);

printf("Gender\t: ");
scanf("%s", &gender);

printf("Phone\t: ");
scanf("%s", &phone);

printf("Email\t: ");
scanf("%s", &email);

fprintf(fPtr, "Staff ID\t Name\t\t Gender\t\t Phone\t\t Email");
fprintf(fPtr1, "\n%s\t\t %s\t\t %s\t\t %s\t %s", id, name, gender, phone, email);

printf("\nSYSTEM: New Staff Profile is Added Successfully.");

fclose(fPtr);
fclose(fPtr1);
return 0;
}

输出给:

===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.
--------------------------------
Process exited with return value 0
Press any key to continue . . .

但是,text.file 中的输出并不像预期的那样:

Staff ID      Name        Gender         Phone       Email
1 Carmen Gray
Female 123-4567890 carmen@live.com

问题在于这段代码:

fflush(stdin);
printf("Name\t: ");
fgets(name,100,stdin);

如果我使用 scanf 而不是 fgets,我将无法存储带空格的字符串。谁能建议我如何让它发挥作用?

最佳答案

好吧,你有整个字符串,你只需要在字符串的末尾放置一个空终止符或者将它传递给一个新的字符串:

int i = 0;
int lastPlace = 0;

for(i=0 ; i < 100 ; i++)
{
if(name[i] == '\n')
name[i] = '\0';
}

正如祖伯格所说:

fgets Reads characters from stream and stores them as a C string into str until 
(num-1) characters have been read or either a newline or the end-of-file is
reached, whichever happens first.

A newline character makes fgets stop reading, but it is considered a valid
character by the function and included in the string copied to str.

A terminating null character is automatically appended after the characters
copied to str.

这意味着您的代码中的问题是您将换行符写入文件。只需删除它!

完整代码:

#include<stdio.h> 
int main(){
char name[100], gender[100], email[100], id[10], phone[20];
FILE *fPtr;
fPtr=fopen("staffinfo.txt","w");
FILE *fPtr1;
fPtr1=fopen("staffinfo.txt","a+");

if (fPtr == NULL)
printf("Error in opening file\n");
if (fPtr1 == NULL)
printf("Error in opening file\n");

printf("\n===Add New Staff Profile===");
printf("\n\nPlease enter the following staff information.");

printf("\n\nStaff ID: ");
scanf("%s", &id);

fflush(stdin);
printf("Name\t: ");
fgets(name,100,stdin);

// MY CODE EXAMPLE HERE
int k = 0;
int lastPlace = 0;

for(k=0 ; k < 100 ; k++)
{
if(name[k] == '\n')
name[k] = '\0';
}

printf("Gender\t: ");
scanf("%s", &gender);

printf("Phone\t: ");
scanf("%s", &phone);

printf("Email\t: ");
scanf("%s", &email);

fprintf(fPtr, "Staff ID\t Name\t\t Gender\t\t Phone\t\t Email");
fprintf(fPtr1, "\n%s\t\t %s\t\t %s\t\t %s\t %s", id, name, gender, phone, email);

printf("\nSYSTEM: New Staff Profile is Added Successfully.");

fclose(fPtr);
fclose(fPtr1);
return 0;
}

关于c - 尝试将多个信息存储到文本文件时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18352828/

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