2015-03-22 5 views
0

Я пытаюсь разобрать вход и сохранить их в массиве строк. Поэтому, если пользователь вводит {«hello world | foo bar»}, я буду разбирать на основе пространства, и если есть | или eof Я храню нуль. После того, как я закончил синтаксический и хотите проверить сохраненные маркеры с помощью:Почему существует разрыв между заявлениями печати?

while(i < j) { 
    printf("%s\n", args[i]); 
    i++; 
} 

Выход нечто вроде

hello 
world 
(null) 
foo 

bar 
(null) 

Так что с этой щелью?

+2

Можем ли мы увидеть код, который заполняет args? – QuestionC

+1

Я испортил цикл while при хранении жетонов. Теперь он отлично работает – minionhacking

ответ

0

Во-первых, вам нужно убедиться, что вы действительно измеряете свой выход, а не комбинированный вход и выход. Самый простой способ сделать это - перенаправить ваш вывод в файл. Если предположить, что название программы является «a.out»

a.out > output.txt 

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

После того, как у вас есть хорошее сцепление с дорогой, на которой входной/выходной поток печати, что, то помните, что если args[i] содержит \n символ новой строки, это будет распечатать его так же, как если бы она содержала слово hello. Возможно, вам придется выследить источник новой строки и исправить ее там. Простым способом является подавление печати, если args[i] соответствует нежелательному тексту; однако такой техники, как правило, следует избегать в программах, отличных от игрушек, поскольку в конечном итоге он позволяет использовать плохие данные в переменных, а это означает, что с течением времени становится более сложным (если не невозможно).

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