Как решить проблему scanf и fgets в C?
В этом коде проблема, с которой я сталкиваюсь, возникает всякий раз, когда я пытаюсь использовать функция scanf после
printf("Enter your choice: ");в первой части и
printf("Enter your name: ");во второй части она не позволяет мне
fputs("Select your choice to update: ", stdout);выполните этот код далее. Он останавливается там, но всякий раз, когда я использую fgets это дает сообщение о том, что
printf("Access Denied. Please enter correct Details.\n");Как решить эту проблему.
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 15 #define STRING_LEN 50 int update_info(FILE * fr1, FILE * fr2, FILE * fr3, FILE * fw1, char *name, int *dob); /* Global Variables */ char one='1', two='2', three='3', four='4', five='5', six='6', seven='7', eight='8', choice[MAX]; static const char * listing[] = {"Name", "Date of birth","ID card number","Phone number","Address","Account","Fixing year","Deposit amount"}; int main(){ FILE * fw1 = fopen("new.csv","w"); FILE * fr1 = fopen("file.csv", "r"); FILE * fr2 = fopen("file.csv", "r"); FILE * fr3 = fopen("file.csv","r"); int dob[11]; char name[15] = ""; while(one != choice[0]){ printf("%c. Create new account\n",one); printf("%c. Update information\n",two); printf("Enter your choice: "); scanf("%7s", &choice); // fgets(choice, 7, stdin); if (choice[0] == one){ printf("Selected One"); break; } else if (choice[0] == two){ update_info(fr1, fr2, fr3, fw1, name, dob); break; } else{ printf("Please enter the correct information\n"); break; } } return 0; } Next part int update_info(FILE * fr1, FILE * fr2, FILE * fr3, FILE * fw1, char *name, int *dob){ int option, i=0, one_by_one; char file_text[100], updated_name[50], str[100], string[STRING_LEN], input[STRING_LEN], saved_word[STRING_LEN]; char* word = NULL; short int FLAG = 0; printf("Enter your name: "); scanf("%s", &str); // fgets(str, 100, stdin); while(fscanf(fr1, "%s", file_text) != EOF){ if(!strcmp(file_text, str)){ printf("Found. Here are your details. \n"); FLAG = 1; } } if (!(FLAG == 1)){ printf("Access Denied. Please enter correct Details.\n"); return -1; } fclose(fr1); int c = fgetc(fr2); while(c != EOF){ file_text[one_by_one] = c; if(file_text[one_by_one] == ','){ file_text[one_by_one] = '\0'; printf("Here is your %s: %s\n",listing[i],file_text); one_by_one = 0; i++; } else one_by_one++; c = fgetc(fr2); } fclose(fr2); for (option = 1; option <= sizeof(listing)/sizeof(char *); ++option) printf("%d. Your %s\n", option, listing[option-1]); // printf("Select your choice to update: "); fputs("Select your choice to update: ", stdout); scanf("%d", &option); if (option == 1){ while(fgets(string, STRING_LEN-1, fr3)){ printf("Scanned now.\n"); } } return 0; } What I have tried: You can check it and its working fine but two problems I am not understanding.
Richard MacCutchan
Почему вы пытаетесь ввести строку из 7 символов, когда все, что вам нужно, - это одно числовое значение? Сделай это так:
int выбор;
scanf ("%d", &choice);
переключатель (выбор)
{
корпус 1;
// что бы ни делал вариант 1;
перерыв;
случай 2;
// любой вариант 2does;
перерыв;
по умолчанию:
// плохая ситуация с опционами
}
KarstenK
опубликуйте его как ответ.