user-0 提问: 为什么一输入字符。。就彻底乱了。能给点提示不

回复:
user: user-1
content: VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和 寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时 候。

user: user-2
content: #include <stdio.h> char s[]="123 ab 4"; char *p; int v,n,k; void main() {     p=s;     while (1) {         k=sscanf(p,"%d%n",&v,&n);         printf("k,v,n=%d,%d,%d\n",k,v,n);         if (1==k) {             p+=n;         } else if (0==k) {             printf("skip char[%c]\n",p[0]);             p++;         } else {//EOF==k             break;         }     }     printf("End.\n"); } //k,v,n=1,123,3 //k,v,n=0,123,3 //skip char[ ] //k,v,n=0,123,3 //skip char[a] //k,v,n=0,123,3 //skip char[b] //k,v,n=1,4,2 //k,v,n=-1,4,2 //End.

user: user-2
content: 引用 29 楼 u012815466 的回复:哎呀一时脑袋发热，把想解决的问题都忘了。 我最想的解决的问题就是：当程序接受到字符类型的输入的时候不在陷入死循环或者让用户重新输入也行。 #include <stdio.h> #include <string.h> char s[80]; int i; char c; int main() {     while (1) {         printf("Input a integer:");fflush(stdout);         rewind(stdin);         fgets(s,80,stdin);         if (strlen(s)>10) {             printf("Input too long(>9)!\n");             continue;         }         if (2==sscanf(s,"%d%c",&i,&c)) {             if ('\n'==c) {                 printf("%d is a integer.\n",i);                 break;             }         }         if ('\n'==s[strlen(s)-1]) s[strlen(s)-1]=0;         printf("\"%s\" is NOT a integer!\n",s);     }     return 0; }

user: user-3
content: 在函数里用这个判断语句试试  int flag; flag = scanf("%d",&n);//这里赋值成功返回1，执行if，失败会返回0，执行else if  (flag== 1) {} else {}

user: user-0
content: 哎呀一时脑袋发热，把想解决的问题都忘了。 我最想的解决的问题就是：当程序接受到字符类型的输入的时候不在陷入死循环或者让用户重新输入也行。

user: user-4
content: %后面放d，输入数字，没问题，我编译了。%后面放c,输入字符，没问题，我编译了。

user: user-5
content: 看看到底是哪里的问题

user: user-6
content: 有事你就忙去吧，我改好了就发上去

user: user-6
content: 稍等啊，我改改

user: user-6
content: lz你最中是想输入字符实现那个功能？那就得把switch那儿也改改

user: user-0
content: 先多谢了，要搞这个问题又要敲一大堆代码了

user: user-0
content: 引用 21 楼 u012421456 的回复:[quote=引用 12 楼 u012421456 的回复:] scanf中输入的那里是 %d，即输入的必须是int型数据 你上面定义的输入的是整型变量，输入字符当然就错啊[/quote]那这问题能怎么解决？

user: user-6
content: 引用 12 楼 u012421456 的回复:scanf中输入的那里是 %d，即输入的必须是int型数据 你上面定义的输入的是整型变量，输入字符当然就错啊

user: user-0
content: 引用 19 楼 u012421456 的回复:[quote=引用 12 楼 u012421456 的回复:] scanf中输入的那里是 %d，即输入的必须是int型数据 12楼 [/quote]那些已经改正了，但输入字符就无限循环的问题还在。。。

user: user-6
content: 引用 12 楼 u012421456 的回复:scanf中输入的那里是 %d，即输入的必须是int型数据 12楼

user: user-6
content: 你看2楼那儿的代码不行吗

user: user-0
content: 其实就是输入字符，程序就无限循环....

user: user-6
content: 靠，网不好，刚看到14楼的回答

user: user-6

user: user-0
content: #include <stdio.h> #include <stdlib.h>  int select() {     int number,again;     printf("请输入数字1-5:");     do     {                  scanf("%d",&number);          if((number > 0) && (number < 6))        {             switch(number)           {             case 1: printf("\ntest1"); break;             case 2: printf("\ntest2"); break;             case 3: printf("\ntest3");break;             case 4: printf("\ntest4"); break;                     case 5: printf("\ntest5"); break;           }           printf("\n\n再来一次输入大于的整数：\n输入数字0表示退出\n请输入:");           scanf("%d",&again);                   }           else        {            printf("请输入数字1-5:");            again = 1;         }                        }while( again != 0);               }  int main() {     int account,password;     printf("请输入登录名和密码（均为：123）");          do     {          printf("\nAccount:");         scanf("%d",&account);         printf("Password:");         scanf("%d",&password);                  if(account != 123 || password != 123)         {           printf("账号或密码错误，再次输入");           account = 0;           password = 0;         }                           }while(account != 123 && password != 123);                  select();  }  这是修改后的。。。但是问题还在，只要输入字符就会无限循环