ibilalkayy Ответов: 2

Как остановить сообщение о результате несколько раз?


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

int allDigits(char *s){
  for(; *s!=0; s++){
    if(!isdigit(*s)){
      return 0;
    }
  }
  return 1;
}

int main(){
  FILE * fr = fopen("fiile.csv", "r");
  FILE * fr1 = fopen("fiile.csv", "r");
  char toFind[50], line[200], save[200];
  int err=0, option, i=0;
  const int numberOfFields = 8; 
  static const char * listing[] = {"Name", "Date of birth","ID card number","Phone number","Address","Account","Fixing year","Deposit amount"};
  char *word = NULL;
  char *wordOne = NULL;

  do{
    printf("Enter you ID Card Number: ");
    scanf("%s", toFind);

    do{
      if(strlen(toFind) != 13){
        err = 1;
        break;
      }

      if(!allDigits(toFind)){
        err = 2;
        break;
      }
    {
      err = 3;

      while(fgets(line, 200, fr))
      {
        word = strtok(line, "\n");
        strcpy(save, line);

        if(strstr(save, toFind))
        {
          wordOne = strtok(word, ",");
          while(wordOne != NULL)
          {
           printf("Here is your %s: %s\n",listing[i], wordOne);
           wordOne = strtok(NULL, ",");
           i = (i+1) % numberOfFields;
           err = 0;
          }
        }

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

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

	    if (option == 1)
	    {
	       while(fgets(line, 50, fr1))
	       {
              printf("scanned now. \n");
	       }
	    }
        fclose(fr1);
      } 

      if(err){
        break;
      }
      fclose(fr);
    }

    // second do while loop
    }while(0);

   // first do while loop
    if(err){
      printf("Test %d failed\n", err);
      break;
    }
  }
  while(err);

  return 0;
}


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

Код работает правильно, но вот проблема, которую я хочу устранить, заключается в том, что при запуске кода, в последнем случае, когда он дает возможность выбрать свой выбор для обновления. И когда я пишу 1=имя чтобы обновить, он дает мне результат, что файл является сканируется сейчас но результат появляется 5 раз. Хотя я мог бы написать перерыв; в конце концов, но мой код теперь не ограничивается только сканированием. Это нечто большее. Я хочу остановить это другим способом. Есть ли другой способ остановить это и просто показать мне один раз.

2 Ответов

Рейтинг:
0

OriginalGriff

Во - первых, выберите стиль отступа и придерживайтесь его. Когда вы делаете такие вещи, как это:

do{
  if(strlen(toFind) != 13){
    ...
  }

  if(!allDigits(toFind)){
    ...
  }
{
  err = 3;
И
  }while(0);

 // first do while loop
  if(err){
    ...
  }
}
while(err);

Совершенно не очевидно, что происходит. Первый пример не имеет очевидной причины для нового набора фигурных скобок, а второй пример выглядит как бесконечный цикл, а не конец цикла. do ... while петля.

Что касается проблемы, которую вы заметили, то для ее решения требуется, чтобы ваш код работал с вашими данными, а у нас вообще нет доступа к этим данным.

Так что все будет зависеть от тебя.
К счастью, у вас есть инструмент, который поможет вам выяснить, что происходит: отладчик. Как вы его используете, зависит от вашей системы компилятора, но быстрый поиск в Google имени вашей IDE и "отладчика" должен дать вам необходимую информацию.

Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что то, что вы ожидали, произойдет именно так, как и произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!


Рейтинг:
0

Richard MacCutchan

do {
// ...
while(0);

Просто делает ваш код более трудным для понимания. Вы можете удалить эти два прилагаемых утверждения, и это будет работать так же хорошо.

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