У меня есть задание, в котором я должен создать основную функцию, которая принимает текстовый файл (в данном случае: 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