我应该创建一个链表,每个节点都有结构:
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
的替代声明?
答案 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);
正确跳过最终空格换行