ставит дисплеи, но% s нет - PullRequest
0 голосов
/ 04 марта 2012

Мой файл имеет следующий шаблон.

word1 word2 word3
wordzz word33 word2431 word341

и т. Д.

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

Теперь весь код довольно сложно объяснить, но здесь есть проблема.

В конкретном месте, когда я пытаюсь сделать следующее

printf("\n%s",ptr1->name);
puts(ptr1->name);

, где ptr1 - это название заголовка любого связанного списка.(скажем, строка 1)
поле имени - это имя, т. е. word1,word2 etc. Теперь вывод

word1word1
word2word2
word3

Почему word3 не печатается дважды?Эта целая проблема даже мешает мне strcmp последнее слово в списке.

Пожалуйста, помогите.

PS

также, когда я делаю

printf("%d",ptr1);

он печатает три разных значения для ptr, ни одно из которых не равно NULL.

У меня есть два одинаковых массива одинаковой структуры.Я использую одну и ту же функцию для заполнения двух массивов.СЕЙЧАС

    node* ptr,*ptr1; 
ptr=first[i].ptr;
ptr1=second[i].ptr;
while(ptr!=NULL) 
{
printf(" \n1");
printf(" %s", ptr->name); // Works Fine
if(!strcmp(ptr->name,"string")) 
    {


    while(ptr1!=NULL)
    {
        printf("A %s ",ptr1->name);// Problem
                    fflush(stdout);  // EDITS AS ASKED BY USER `pmg`
                    puts(ptr1->name);       
                if(!strcmp(ptr1->name,strt))
        {
            printf("\n 4\n");
            return 1;
        }
        else
        {
        ptr1=ptr1->next;
        }
    }
    return 0;


    }
else 
    {
    ptr=ptr->next;
    }

}

Почему у меня проблема в упомянутом месте, а не в месте 'отлично работает'.

При работоспособности мне показывают все узлы (имена), но впроблемная точка: мне не показывают фамилию.

Но если я ставлю проблему, она отображает и это имя.

, если перед этим фрагментом кода я печатаю второй массив, используятолько printf.он печатает каждый узел (имя).Может кто-нибудь сказать мне, почему он не печатает позже .?

1 Ответ

2 голосов
/ 04 марта 2012
printf("\n%s",ptr1->name); // Problem

stdout по умолчанию буферизуется при подключении к терминалу, необходимо очистить поток для печати строки.Используйте fflush(stdout) сразу после вызова printf для сброса stdout.Печать символа новой строки также сбрасывается stdout, когда поток буферизуется в строке.

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

Как упомянул @JensGustedt в комментарии к вопросу, ставить новую строку перед строкой - вредная привычка "думать о строке как о завершенной '\ n' и организовывать свой код соответствующим образом."

...