Добавление и удаление из стека через данные текстового файла - PullRequest
0 голосов
/ 30 апреля 2018

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

У меня стек и очередь работают нормально. Тем не менее, я не уверен, как прочитать файл и заставить программу на самом деле интерпретировать то, что он говорит.

Например: если в первой строке файла написано «добавить 3», программа вставит 3 в стек и поставит 3 в очередь. Если в следующей строке файла написано «удалить», это означает, что стек должен вытолкнуть очередь из очереди.

Как я уже сказал, функции push / pop для enqueue / dequeue не являются проблемой. Я не знаю, как заставить мою программу действительно интерпретировать и различать целые числа, символы и использовать эту информацию для выполнения функций.

sqjuggler.c: (это основная функция для чтения файла)

 #include <string.h>
#include <stdio.h>
#include "sqjuggler.h"
#include "stackADT.h"
#include "queueADT.h"

int main(int argc, char *argv[])
{

   Stack inStack, outStack;
   Queue inQueue;


  inStack = creates();
  outStack = creates();
  inQueue = createq();


   char *filename;
   if(argc < 2)
   {
        printf("Usage: Enter Filename after ./sqjuggler\n");
        exit(EXIT_FAILURE);
   }else if(argc > 2)
   {
        printf("Usage: Entered too many file names.\n");
        exit(EXIT_FAILURE);
   }else {filename = argv[1];}

   printf("You entered the filename: %s\n", argv[1]);

   FILE *fp = fopen(filename, "r+");
   if(fp == NULL)
   {
        printf("Cant open %s\n", filename);
        exit(EXIT_FAILURE);
   }

   char str[1000];
   while(fgets(str, 1000, fp) != NULL)
        printf("%s", str);
   fclose(fp);
}

Прямо сейчас печатается текстовый файл. Это все.

Текстовый файл:

add 3
add 2
delete
add 5
delete
add 10
add 7
delete
add 0
delete
add 11
delete
delete
delete

Консоль

xxxxxx:~project2$ make j
gcc  -o j queueADT.c queueADT.h stackADT.c stackADT.h sqjuggler.c sqjuggler.h
xxxxxx:~project2$ ./j test.dat
You entered the filename: test.dat
add 3
add 2
delete
add 5
delete
add 10
add 7
delete
add 0
delete
add 11
delete
delete
delete

Любая помощь очень ценится !!!

EDIT

Я пытался использовать функцию strtok для разделения файла на токены. Когда я это реализовал:

char *pch;

  pch = strtok(str," \n");
  while (pch != NULL)
  {
    printf ("%s\n",pch);
    pch = strtok(NULL, " \n");
  }           

Печатается только лишнее "delete"

Я не уверен, как заставить его разбить весь файл на токены, а затем проанализировать оттуда.

EDIT

Я добавил это в цикл while и получил следующую распечатку:

while(fgets(str, 1000, fp) != NULL)
   {
        printf("%s", str);
        char *value = strtok(str, " \n");
        printf("%s", value);
   }

Консоль

You entered the filename: test.dat
add 3
addadd 2
adddelete
deleteadd 5
adddelete
deleteadd 10
addadd 7
adddelete
deleteadd 0
adddelete
deleteadd 11
adddelete
deletedelete
deletedelete
...