快速预订问题
#include #pragma pack(push) #pragma (1) typedef struct contact { char firstname [40]; char lastname [40]; char address [100]; char phone[10]; }contact; #pragma pack(pop) int main () { FILE *pFile; contact entry = {"", "", "", ""}; char choice; pFile = fopen("C:\\contacts.txt", "w+"); if(!pFile){ printf("File could not be open"); return 1; } printf("Choose a selection\n\n"); printf("1. Enter First Name\n"); printf("2. Enter Last Name\n"); printf("3. Enter Address\n"); printf("4. Enter Phone Number\n\n"); scanf( "%d", &choice); switch (choice){ case 1: printf("First name: \n"); fgets(entry.firstname, sizeof(entry.firstname),pFile); break; case 2: printf("Last name: \n"); fgets(entry.lastname, sizeof(entry.lastname),pFile); break; case 3: printf("Address: \n"); fgets(entry.address, sizeof(entry.address),pFile); break; case 4: printf("Phone Number: \n"); fgets(entry.phone, sizeof(entry.phone),pFile); break; default: printf(" No Choice selected, Ending Address Book Entry system"); break; } fwrite(&entry, sizeof(contact), 1, pFile); printf("Enter a new contact?"); scanf("%s", &choice); //while(choice != 'n'); fclose(pFile); getchar(); return 0; }
这个代码在我选择一个条目后,我输入一个条目并按下输入它崩溃说变量’条目’周围的堆栈已损坏。 我相信这是我正在使用的fwritefunction。 我知道fwrite寻找的第一个参数是一个指向要写入的元素数组的指针,但我想我现在很困惑。 任何帮助将非常感激。
你应该改变你所有的
fgets(entry.firstname, sizeof(entry.firstname),pFile);
至
fgets(entry.firstname, sizeof(entry.firstname),stdin);
因为您是从控制台读取的,而不是文件。
还有,用
scanf("%s", &choice);
和
scanf( "%d", &choice);
你正试图读取一个字符串和一个数字并将其存储在一个char
。 他们都应该
scanf("%c", &choice);
也就是说,你应该考虑使用ifstream
, cin
, getline
和std::string
重写这个,以便在你不寻求最大性能时让你的生活更轻松。