Как получить из файла с помощью оператора if? - PullRequest
0 голосов
/ 27 мая 2020

Я хочу сделать этот оператор if, потому что он получает только b из билалхана. А вторую я не знаю как получить. Так же, как третий и так далее. Как их получить?

Вот file.txt

bilalkhan 02/02/1995 709734234 243322223 address current 2019 324324

Вот код

#include <stdio.h>
#include <stdlib.h>
int main(){
    FILE * fp = fopen("file.txt","r");
    char one='1', two='2', three='3', four='4', five='5', six='6', seven='7', eight='8';
    int buffer, option;
    printf("%c. Your Name: \n",one);
    printf("%c. Your Date of Birth: \n",two);
    printf("%c. Your ID Card Number: \n",three);
    printf("%c. Your Phone Number: \n",four);
    printf("%c. Your Address: \n",five);
    printf("%c. Your Account: \n",six);
    printf("%c. Your Fixing Year: \n",seven);
    printf("%c. Your Amount: \n",eight);

    printf("Select your choice to update: ");
    scanf("%d", &option);

    while((buffer = fgetc(fp)) != EOF){
      if (option == 1){
        printf("Your name: %c",buffer);
        break;
      }
      else if(option == 2){
        printf("Your DOB: %c", buffer);
        break;
      }
      else{
        printf("Select right option");
        break;
      }
    }
    return 0;   
}

1 Ответ

0 голосов
/ 27 мая 2020

это только выборка b из билалхана

это потому, что break останавливает ваш l oop while

Кажется, каждое поле только одним словом, включая адрес, в этом случае простое использование fscanf решит вашу проблему, например:

#include <stdio.h>

#define MAX_LEN 256

int main()
{
  FILE * fp = fopen("file.txt","r");
  int option, rank;
  char word[MAX_LEN];
  static const char * const msg[] = {
    "Name",
    "Date of Birth",
    "ID Card Number",
    "Phone Number",
    "Address",
    "Account",
    "Fixing Year",
    "Amount"
  };

  if (fp == NULL) {
    perror("cannot read file.txt");
    return -1;
  }

  for (option = 1; option <= sizeof(msg)/sizeof(char *); ++option)
    printf("%d. Your %s:\n", option, msg[option-1]);

  fputs("Select your choice to update: ", stdout);

  if ((scanf("%d", &option) != 1) ||
      (option < 1) || (option > sizeof(msg)/sizeof(char *))) {
    puts("invalid choice");
    fclose(fp);
    return -1;
  }

  /* the expected word is at rank option, other must be bypasses */
  for (rank = 0; rank != option; ++rank) {
    if (fscanf(fp, "%255s", word) != 1) {
      puts("invalid input file");
      fclose(fp);
      return -1;
    }
  }

  printf("Your %s: %s\n", msg[option - 1], word);

  fclose(fp);
  return 0;
}

Компиляция и выполнение:

pi@raspberrypi:/tmp $ gcc -Wall c.c
pi@raspberrypi:/tmp $ ./a.out
cannot read file.txt: No such file or directory
pi@raspberrypi:/tmp $ echo "bilalkhan 02/02/1995 709734234 243322223 address current 2019 324324" > file.txt
pi@raspberrypi:/tmp $ ./a.out
1. Your Name:
2. Your Date of Birth:
3. Your ID Card Number:
4. Your Phone Number:
5. Your Address:
6. Your Account:
7. Your Fixing Year:
8. Your Amount:
Select your choice to update: 0
invalid choice
pi@raspberrypi:/tmp $ ./a.out
1. Your Name:
2. Your Date of Birth:
3. Your ID Card Number:
4. Your Phone Number:
5. Your Address:
6. Your Account:
7. Your Fixing Year:
8. Your Amount:
Select your choice to update: 9
invalid choice
pi@raspberrypi:/tmp $ ./a.out
1. Your Name:
2. Your Date of Birth:
3. Your ID Card Number:
4. Your Phone Number:
5. Your Address:
6. Your Account:
7. Your Fixing Year:
8. Your Amount:
Select your choice to update: 1
Your Name: bilalkhan
pi@raspberrypi:/tmp $ ./a.out
1. Your Name:
2. Your Date of Birth:
3. Your ID Card Number:
4. Your Phone Number:
5. Your Address:
6. Your Account:
7. Your Fixing Year:
8. Your Amount:
Select your choice to update: 2
Your Date of Birth: 02/02/1995
pi@raspberrypi:/tmp $ ./a.out
1. Your Name:
2. Your Date of Birth:
3. Your ID Card Number:
4. Your Phone Number:
5. Your Address:
6. Your Account:
7. Your Fixing Year:
8. Your Amount:
Select your choice to update: 8
Your Amount: 324324
pi@raspberrypi:/tmp $ 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...