2015-04-09 1 views
0

У меня есть указатель на структуру pcbptr, который указывает на struct pcb. Чтобы упростить это немного, я сказать pcb имеет 3 параметра все типа int поэтому у меня естьЧтение файла с числами, разделенных запятыми и сохранение каждой строки в указателе структуры

pcbptr mypcb = malloc(sizeof(pcb)) 
mypcb->first = 0; 
mypcb->second = 0; 
mypcb->third = 0; 

Теперь у меня есть файл, который я называю input.txt, и в основном это просто выглядит так:

3, 5, 2 
5, 2, 1 

То, что я хочу сделать, это создать 2 разных pcbptr сек, хранящие следующие значения поэтому мой первый mypcb будет выглядеть следующим образом:

mypcb->first = 3, mypcb->second = 5, mypcb->third = 2, 

и второй mypcb будет выглядеть следующим образом:

mypcb->first = 5, mypcb->second = 2, mypcb->third = 1 

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

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

Может ли кто-нибудь объяснить, как я могу это сделать?

+0

См. [Это хорошая идея для указателей typedef?] (Http://stackoverflow.com/questions/750178/is-it-a-good-idea-to-typedef-pointers) –

+0

Если мой ответ isn ' t помогая вам, вам нужно будет показать больше вашего кода, чтобы мы имели представление о том, какие проблемы у вас есть. Пожалуйста, прочитайте о том, как создать MCVE ([Как создать минимальный, полный и проверенный пример?] (Http://stackoverflow.com/help/mcve)). Ваш вопрос об отслеживании позиций озадачивает меня; поток файлов отслеживает, где вы находитесь. Ваше упоминание о «прекращении написания» меня тоже озадачивает; запись ранее не упоминалась, и неясно, почему запись в выходной файл повлияет на то, как вы читаете данные из входного файла. _ [... продолжение ...] _ –

+0

_ [... продолжение ...] _ Также неясно, нужно ли вам значение из двух (или более) строк, доступных в отдельных структурах одновременно, или достаточно, чтобы одна строка была на время в памяти. То, как вы обрабатываете выделенное 'struct pcb', будет зависеть от ответа на этот вопрос. Помните, что для каждого 'malloc()' должен быть соответствующий 'free()'. –

ответ

2

Должны быть другие вопросы, задающие в основном то же самое, но, вероятно, легче написать ответ, чем найти дубликат.

Вы, вероятно, хотите читать строки с fgets() и конвертировать их с sscanf():

char buffer[4096]; 

while (fgets(buffer, sizeof(buffer), stdin) != 0) 
{ 
    pcb *new_pcb = malloc(sizeof(*new_pcb)); 
    if (new_pcb == 0) 
     …report out of memory error; do not pass go; do not collect $200… 
    if (sscanf(buffer, "%d, %d, %d", &new_pcb->first, &new_pcb->second, &new_pcb->third) != 3) 
     …report data format error; do not leak memory… 
    …process or save data pointed at by new_pcb somewhere… 
} 

Очевидно, вы можете указать другой входной поток файла из stdin, если вы хотите (и вы также можете предпочесть сделать это) ,

Смежные вопросы