ibilalkayy Ответов: 3

Как прочитать данные, контактный нашли и не нашли пин-код из файла?


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define STRING_LEN 200

char string[STRING_LEN], pinFind[STRING_LEN];
char * lineOne = NULL, *pinFound = NULL, *numbers[5];
int i;
char *read(FILE * fname, char * findPin){
    while(fgets(string, STRING_LEN, fname)){
        lineOne = strtok(string, "\n");
        pinFound = strstr(lineOne, pinFind);

        numbers[0] = strtok(lineOne, ",");
        for(i = 1; i < 5; i++){
            numbers[i] = strtok(NULL, ",");
        }
        if(pinFound)   return string;
        if(!pinFound)   return string;
    }
  return 0;
}

int main(){
  FILE * fp1 = fopen("file.csv", "r");
  printf("Enter your Pin Code: ");
    scanf("%s", pinFind);

  read(fp1, pinFind);
  for(i=0; i<5; i++){
    printf("Here is: %s\n", numbers[i]);
  }
  return 0;
}


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

В этом коде я пытаюсь заставить "pinFound " и"! pinFound` работать одновременно. Но это просто дает мне результат " pinFound`

И когда я использую другой оператор if и ввожу pin-код из первой строки файла, он дает мне данные первой строки, но мне нужны исключительные данные pin-кода. А если ввести пин-код из второй строки файла, то он работает и выдает мне данные первой строки.
Data in the file

    Bilal Khan,1111111111111,1122,1000,12255334
    Ali Ahmed,2222222222222,2233,2000,66778899

Expected result
    Both results have a pin code but one is found and another is not.

    Enter your Pin Code: 1122
    Pin found......
    Here is: Bilal Khan
    Here is: 1111111111111
    Here is: 1122
    Here is: 1000
    Here is: 12255334
    
    Pin not Found...
    Here is: Ali Ahmed
    Here is: 2222222222222
    Here is: 2233
    Here is: 2000
    Here is: 667788994

3 Ответов

Рейтинг:
2

CPallini

Попробуйте (Примечание: код не является надежным):

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

#define PIN_FOUND 1
#define FIELDS  5
#define PIN_NOT_FOUND 0
#define STRING_LEN 200


int find(char * line, char * pin, char * field[])
{
  int i;
  line = strtok(line, "\n");

  field[0] = strtok(line, ",");
  for(i = 1; i < FIELDS; i++)
  {
    field[i] = strtok(NULL, ",");
  }
  return strstr(field[2], pin) == NULL ? PIN_NOT_FOUND : PIN_FOUND;
}

int main()
{
  char line[STRING_LEN], pin[STRING_LEN], * field[FIELDS];

  printf("Enter your Pin Code: ");
    scanf("%s", pin);

  FILE * fp = fopen("file.csv", "r");
  while ( fgets(line, STRING_LEN, fp))
  {
    int i;
    if ( find(line, pin, field) == PIN_FOUND)
      printf("\npin found.\n");
    else
      printf("\npin not found.\n");

    for(i=0; i<FIELDS; i++)
      printf("Here is: %s\n", field[i]);
  }
  fclose(fp);
  return 0;
}


ibilalkayy

Братан, я использовал цикл while в другой функции, чтобы больше не повторяться. Но вы использовали его в основной функции.

Рейтинг:
1

Richard MacCutchan

if(pinFound)   return string;
if(!pinFound)   return string;

Таким образом, вы возвращаете строку, если pin-код найден, или если он не найден. И вы делаете это в первой строке файла, что не логично. Если pin-код не найден, вы не должны ничего делать до конца программы, когда вы сообщаете "pin-код не найден".

Ваша логика должна быть примерно такой:
Set PinFound = FALSE
While TRUE DO
  Read next line of text
  If end of file break
    Search for pin in current line
    If found then report the details and set PinFound = TRUE
DONE
If PinFound == FALSE then print "pin not found"


ibilalkayy

@RichardMacCutchan, пожалуйста, какой-нибудь код в соответствии с логикой. Я пытался, но ничего не понимал.

Richard MacCutchan

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

Рейтинг:
0

OriginalGriff

Компиляция не означает, что ваш код верен! :смеяться:
Подумайте о процессе разработки как о написании электронного письма: успешная компиляция означает, что вы написали электронное письмо на правильном языке - например, на английском, а не на немецком, - а не то, что письмо содержало сообщение, которое вы хотели отправить.

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

Начните с рассмотрения того, что он делает, и как это отличается от того, что вы хотели. Это важно, потому что это дает вам информацию о том, почему он это делает. Например, если программа предназначена для того, чтобы позволить пользователю ввести число, а он удваивает его и печатает ответ, то если ввод / вывод был таким:

Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16
Тогда совершенно очевидно, что проблема заключается в бите, который удваивает его - он не прибавляет себя к себе или умножает его на 2, он умножает его на себя и возвращает квадрат входного сигнала.
Таким образом, вы можете посмотреть на код, и очевидно, что он находится где-то здесь:
int Double(int value)
   {
   return value * value;
   }

Как только у вас появится идея, что может пойти не так, начните использовать отладчик, чтобы выяснить, почему. Поместите точку останова в первую строку метода и запустите приложение. Когда он достигнет точки останова, отладчик остановится и передаст управление вам. Теперь вы можете запускать свой код построчно (так называемый "одноступенчатый") и просматривать (или даже изменять) содержимое переменных по мере необходимости (черт возьми, вы даже можете изменить код и повторить попытку, если вам это нужно).
Подумайте о том, что должна делать каждая строка кода перед ее выполнением, и сравните это с тем, что она действительно делала, когда вы использовали кнопку "Step over" для выполнения каждой строки по очереди. Он сделал то, что вы ожидали? Если да, то переходите к следующей строке.
Если нет, то почему? Чем это отличается?
Надеюсь, это поможет вам определить, в какой части этого кода есть проблема и в чем она заключается.
Это навык, и его стоит развивать, поскольку он помогает вам как в реальном мире, так и в развитии. И, как и все навыки, он только улучшается при использовании!