ibilalkayy Ответов: 3

Как остановить цикл и распечатать все данные сразу?


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
  FILE * fp1 = fopen("file.csv", "r");
  char string[200], toFind[200], savedLine[200], option;
  char* lineOne = NULL;
  char* result = NULL; 

  printf("Enter your ID Card number: ");
  scanf("%s", toFind);

  while(fgets(string, 200, fp1)){
      lineOne = strtok(string, "\n");
      strcpy(savedLine, lineOne);
      result = strstr(savedLine, toFind);

      if(!result){
      printf("Are you sure? [y/n]: ");
      while ((getchar()) != '\n');
      scanf("%c", &option);
      if(option == 'y'){
          printf("%s\n", lineOne);
          printf("Your account is removed\n");
      }
      if(option == 'n'){
          printf("Your account is not removed.\n");
          break;
      }
   }
}    fclose(fp1);
return 0; 
}


Что я уже пробовал:

Этот код печатает только данные, за исключением одной строки, которую я дал номеру идентификационной карты. Но вот одна проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда он печатает одну строку из файла, он снова спрашивает меня " да " или "нет". Если я ввожу "да", он печатает одну строку и снова спрашивает у меня разрешения.

Как остановить этот цикл многократного разрешения и распечатать данные сразу?

jeron1

Можете ли вы установить точки останова и пошагово выполнить свой код (отладку)?

3 Ответов

Рейтинг:
0

Richard MacCutchan

Логика вашего c ода является достаточно жестким, чтобы следовать. Однако я думаю, что вам нужно добавить break заявление после сообщения, сообщающего пользователю, что учетная запись была удалена. Кроме того, я надеюсь, вы понимаете, что на самом деле ничего не было удалено, так как вы не записываете обновленные данные в новый файл.


ibilalkayy

Я добавил оператор break, но он останавливает одноразовое повторение.

Richard MacCutchan

Честно говоря, я не могу точно понять, что должен делать этот код. Это кажется продолжением всех ваших предыдущих вопросов, но на самом деле не является улучшением ни одного из них. Я предлагаю вам прекратить писать код и подумать о том, что ваша программа должна делать. Как только это станет ясно в вашем уме, попробуйте записать (на вашем родном языке) каждый шаг, необходимый для его достижения. Из этого вы должны быть в состоянии построить логическую программу.

Рейтинг:
0

KarstenK

вы должны отделить свой выходной код от входного кода. Лучше всего использовать его для собственных функций, чтобы поток программы стал более четким.

эмпирическое правило: одна функция для каждой задачи. И никогда больше "спагетти-код" ;-)


Рейтинг:
0

Jiri111

Я не так уверен насчет логина. Я предполагаю, что может помочь следующее:

...
while ((option = getchar()) != 'y' && option != 'n');
if(option == 'y') {
...