将数据读入列表节点

时间:2014-10-10 19:50:34

标签: c syntax

我应该创建一个链表,每个节点都有结构:

struct stack{
    char paint;
    int index;
    struct stack *next;
}
typedef struct stack s;

我应该通过读取m个输入来创建包含m个节点的链表,如:

A 7

B 2

C 1

D 4 ....

所以我尝试使用for循环 像这样失败了,我也尝试顺序scanf

scanf("%c",&c);

scanf("%d",&b);

我也试过这个:

for(i=0;i<m;i++)
{
    scanf("%c %d",&c,&b);
    temp=(s *)malloc(sizeof(s));
    temp->paint=c;
    temp->index=b;
    temp->next=head;
    head=temp;
    temp=NULL;
}

我做错了什么?我实际上害怕scanf所以我通常一直使用getchar,如果可能的话,请说明从终端或具有scanf行输入的文件输入时n的工作原理。还有while((c=getchar())!='\n')使用scanf的替代声明?

2 个答案:

答案 0 :(得分:1)

更改scanf
scanf("%c %d",&c,&b);

scanf(" %c %d",&c,&b);
//     ^Add a space before %c

输入字符值和整数值然后按Enter键后,此处的问题是scanf正在读取\n

%之前的空格会跳过空格(也是\n),它会读取下一个不是空格的字符。

答案 1 :(得分:0)

在scanf中,%c%1s不一样:

  • %c读取下一个字符,无论它是一个空格,换行符,......
  • %1s读取下一个可打印字符

在您的用例中,我认为您应该使用

scanf("%1s %d",&c,&b);

正确跳过最终空格换行