Привет!
Вчера вечером от нефиг делать игрался с сабжем.
Кто скажет почему этот код работает не так как ожидается?
/* Output from p2c 2.00.Oct.15, the Pascal-to-C translator */
/* From input file "Numbers.pas" */
#include <stdlib.h>
#include <stdio.h>
typedef struct item {
int data;
struct item *next;
} item;
int main()
{
struct item *first = NULL;
struct item *tmp;
while (scanf("%d", &tmp->data)!= EOF) {
tmp = (item *)malloc(sizeof(item));
tmp->next = first;
first = tmp;
}
tmp = first;
while (tmp != NULL) {
printf("%d", tmp->data);
tmp = tmp->next;
}
return 0;
}
/* End. */
program Numbers1;
type
itemptr = ^item;
item = record
data: integer;
next: itemptr;
end;
var
first,tmp: itemptr;
n: integer;
begin
first := nil;
while not SeekEof do
begin
read(n);
new(tmp);
tmp^.data := n;
tmp^.next := first;
first := tmp;
end;
tmp := first;
while tmp <> nil do
begin
writeln(tmp^.data);
tmp := tmp^.next
end
end.
А именно, как вы можете видеть, теряется последний элемент связного списка, а головной элемент записывается дважды.
Такой вот машинный перевод)
Программа взята из книги Столярова, for fun.