在这张图片中,我必须编写一个程序,每次读取字母i
时,它都会将值插入到链表中。如果它到达有两个数字的行i 23 42
,它会在42
之后输入23
到链接列表中。
因此,如果我将链接列表打印到txt文件的第3行,它应该打印23, 78, 900
。当它到达第四行时,它应该打印23, 42, 78, 900
。
我不确定如何让程序识别出行中有两个值,而不是一个能够在第一个值之后输入第二个值到链表中。
编辑**
struct node * addToList(struct node *base, int data)
{
struct node *newNode = NULL;
if (base == NULL)
{
base = malloc( sizeof(struct node));
// malloc defend
base->data = data;
base->next = NULL;
return base;
}
while (base->next != NULL)
{
base = base->next;
}
//Now at the end of the list
newNode = malloc( sizeof(struct node));
//Defend against bad malloc
base->next = newNode;
newNode->data = data;
newNode->next = NULL;
return base;
'下一部分是主要的'
while (fscanf(ifp, "%s", inBuf) != EOF)
{
fprintf(stdout, "%s\n", inBuf);
data = atoi(inBuf);
if (NULL == root)
{
root = addToList(root, data);
}
else
{
temp = addToList(root, data);
if (NULL == temp)
{
printf("Failed to add - good bye\n");
return -1;
}
}
我正在尝试创建一个新函数来处理插入
答案 0 :(得分:1)
继续使用"%s"
或" %c"
来阅读命令。请注意%c
之前有一个空格:这是在读取字符之前消耗换行符(尝试没有空格,看看会发生什么)。
当您阅读f
或d
时,请发出另一个scanf("%d", ...)
以获取该号码。
对于i
,您只需发出scanf("%d%d", ...)
,然后检查其返回值即可。如果是1
,则只读取一个数字。如果是2
,则有两个整数。
在尝试阅读下一个命令时,不要忘记检查EOF
。