user-0 提问: for循环下scanf函数中止问题

回复:
user: user-1
content: 关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”   代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-2
content: 链表的增删改：供参考！ 链表的“增删改” 过程：输入链表长度，判断长度是否大于0，循环创建结点，判断头结点是否为空，若为空将新结点追加其后，若不为空，则输入结点信息，将指针域置空，并将该结点地址赋给上一结点的指针域，移动上个指针至新结点，重新申请新空间，返回头结点。 #include <stdio.h> #include <stdlib.h> struct node*creat(struct node *head); void Output(struct node *head); void Insert(struct node *head,int k); void Delete(struct node *head,int j); void Replace(struct node *head,int n); struct node {  	int data; 	struct node *next; }; int main(){      int a,b,c,d; 	struct node *head; 	head=NULL;   	head=creat(head);//新建链表 	Output(head);   	do{ 		printf("\n"); 		printf("请选择您要进行的操作：\n"); 		printf("----------------------------------------\n"); 		printf("1.添加新结点\n"); 		printf("2.删除结点\n"); 		printf("3.修改结点数据\n"); 		printf("4.退出\n"); 		printf("----------------------------------------\n"); 		printf("\n"); 		printf("请选择："); 		scanf("%d",&d);  	switch(d) 	{ 		case 1: 			printf("您选择了添加新结点\n"); 	       printf("请输入要插入结点位置:");//插入新结点 	       scanf("%d",&a); 	       Insert(head,a); 	       Output(head); 		   break; 		case 2: 			printf("您选择了删除结点\n"); 	       printf("请输入要删除的结点:");//删除结点 	       scanf("%d",&b); 	       Delete(head,b); 	       Output(head); 		   break; 		case 3: 			printf("您选择了修改结点数据\n"); 	       printf("请输入要修改结点的位置:");//修改结点数据            scanf("%d",&c); 	       Replace(head,c); 	       Output(head); 		   break; 		case 4: 			break; 	} 	}while(d!=4);  	//printf("\n"); 	//printf("请输入要插入结点位置:");//插入新结点 	//scanf("%d",&a); 	//Insert(head,a); 	//Output(head);  	//printf("\n"); 	//printf("请输入要删除的结点:");//删除结点 	//scanf("%d",&b); 	//Delete(head,b); 	//Output(head);   	//printf("\n"); 	//printf("请输入要修改结点的位置:");//修改结点数据 	//scanf("%d",&c); 	//Replace(head,c); 	//Output(head);  	return 0; } struct node *creat(struct node *head){  	int i,LEN; 	struct node *p,*s; 	printf("请输入链表的长度："); 	scanf("%d",&LEN); 	 	if(LEN>=1){ 		for(i=1;i<=LEN;i++){		           p=(struct node *)malloc(sizeof(struct node *)); 			 			if(head==NULL) 				s=head=p; 			printf("请输入第%d个结点中的数据：",i); 			scanf("%d",&p->data); 			p->next=NULL; 			s->next=p; 			s=p; 		} 	}return (head); } void Output(struct node *head){  	struct node *temp; 	temp=head; 	printf("新链表如下："); 	while(temp!=NULL){ 	 		printf("%d->",temp->data); 		temp=temp->next; 	} }  void Insert(struct node *head,int k){  	struct node *p1,*p2,*p3; 	int i; 	p3=p1=head; 	for(i=1;i<k;i++){ 		p1=p1->next; 	} 		for(i=1;i<k-1;i++){ 		p3=p3->next; 	} 	p2=(struct node *)malloc(sizeof(struct node)); 	printf("请输入新结点的数据："); 	scanf("%d",&p2->data); 	p2->next=p1; 	p3->next=p2; }  void Delete(struct node *head,int j){  	int i; 	struct node *p1,*p2,*p3; 	p1=p2=p3=head; 	for(i=1;i<=j;i++){ 		p2=p2->next; 	} 	/*p1->next=NULL; 	p3=p2->next; 	free(p2); 	p1->next=p3;*/  		for(i=1;i<j-1;i++){ 		p1=p1->next; 	} 			for(i=1;i<j+1;i++){ 		p3=p3->next; 	} 			p1->next=p3; 			//free(p2); }  void Replace(struct node *head,int n){  	int i,m; 	struct node *p; 	p=head; 	for(i=1;i<n;i++){ 		p=p->next; 	} 	printf("请输入该结点的新数据："); 	scanf("%d",&m); 	p->data=m; 	//free(p);  }

user: user-3
content: while(scanf("%d %d",&i,&j)!=EOF);

user: user-0
content: 运行时在命令行情况下输入没法中止