Итак, в вашей программе есть несколько ошибок. Я постараюсь охватить их все здесь, прежде чем я покажу вам изменения.
Ваше сравнение строк просто бессмысленно: save_edit_qu[0] == 'SAVE'
просто сравнивает первый символ / байт save_edit_qu
с 'SAVE'
, что само по себе не является правильным строковым литералом. Вы должны заключить строковые литералы в двойные кавычки в C. И даже если вы сделали это здесь, сравнивать символ со строкой не имеет смысла. Что вы должны сделать, это использовать strcmp
из string.h
, чтобы сделать сравнение для вас. Я поместил это в мою фиксированную версию вашей программы. Формат: strcmp(a,b) == 0
, если строка a
равна строке b
.
Вы даете пользователям возможность редактировать все свои входные данные. Поэтому вы должны поместить свой сбор данных в цикл. Это позволяет вам постоянно повторно собирать данные, пока пользователь этого не сделает.
do {
// collect data.
} while (!done);
Наконец, вы заставляете пользователей выполнять действие в цикле сбора данных, чтобы они могли выбирать, что они хотели бы делать с данными. Они могут либо редактировать, либо сохранять. Там также дело, в которое они не входят ни. В этом случае им будет предложено снова. Это гарантирует еще один цикл управления внутри.
do {
// collect data
do {
// save or edit
} while (!validChoice);
} while (!done);
С учетом сказанного, вот рабочая программа. Я не реализовал для вас часть записи в файл. Я думаю, что вы можете сделать это сами!
#include <stdio.h>
#include <string.h>
int get_line(const char *prompt, char *dest, size_t size) {
printf("%s", prompt);
fflush(stdout);
if (fgets(dest, size, stdin) == NULL) {
dest[0] = '\0';
return 0;
}
dest[strcspn(dest, "\n")] = '\0'; // Lop off potential trailing '\n'
return 1;
}
int main(void)
{
char first_name[20], surname[20], street_no[10], street_name[40], postcode[10], contact_no[20], save_edit_qu[10];
int dd, mm, yy, done = 0;
// Data collection loop: Runs as long as the user opts to edit the data.
do {
// Fetch data.
get_line(" Enter first name:\n", first_name, sizeof first_name);
get_line(" Enter surname:\n", surname, sizeof surname);
get_line(" Contact Number\n", contact_no, sizeof contact_no);
get_line(" Street Number\n", street_no, sizeof street_no);
get_line(" Street Name\n", street_name, sizeof street_name);
get_line(" Postcode\n", postcode, sizeof postcode);
printf(" First Name : %s\n", first_name);
printf(" Surname : %s\n", surname);
printf(" Contact No.: %s\n", contact_no);
printf(" Street No. : %s\n", street_no);
printf(" Stret Name : %s\n", street_name);
printf(" Postcode : %s\n", postcode);
// Action loop: Runs as long as no valid input is given.
do {
get_line(" If the informations above is correct please enter SAVE/if you wish to change any informations please enter edit\n", save_edit_qu, sizeof save_edit_qu);
// Option to quit.
if (strcmp(save_edit_qu, "SAVE") == 0 || strcmp(save_edit_qu, "save") == 0) {
fprintf(stdout, "Writing data to file...\n");
// write data here.
// Set done flag, and exit action loop.
done = 1;
break;
}
// Option to edit.
if (strcmp(save_edit_qu, "EDIT") == 0 || strcmp(save_edit_qu, "edit") == 0 ) {
//loop back to beginning of report
break;
}
// Otherwise ask prompt again ^.
} while (1);
} while (!done);
return 0;
}