user-0 提问: 求助！c语言问题，

回复:
user: user-1
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。

user: user-0
content: 顶一下

user: user-0
content: 可是程序运行的时候有时会出现停止运行的问题，请问怎么解决呢。

user: user-2
content: #include <stdio.h> #include <ctype.h> #include <time.h> //#include <stdbool.h> #include <stdlib.h>  #include <windows.h>   #define IDNO_LENGTH 6 #define CALC_KIND 4 #define CALC_NUM 10  bool checkNo(char idNo[]); char getSignal(); int getResult(int,int,char); void takeTest();  //main函数 int main() {     printf("Please input your four digit ID no(begin with two letters):");     char idNo[IDNO_LENGTH];     do     {         scanf("%s", idNo);         //fflush(stdin);     } while(checkNo(idNo) == false);      printf("1.Start a test\t2.Check score\t3.Exitb\n");     int choose;     do     {         printf("选择：");         scanf("%d", &choose);         //fflush(stdin);     } while(choose != 1 && choose !=2 && choose!=3);      if(choose==1)     {         takeTest();     }else if(choose==2)     {         FILE *fp;         int ch;         if((fp=fopen("score.txt","r+"))==NULL)         {             printf("\n你还没做过题目测试");             getchar();             exit(1);         }         ch = fgetc(fp);         while(ch!=EOF)         {             putchar(ch);             ch = fgetc(fp);         }         fclose(fp);     }     else     {         exit(0);     }      return 0; }  //获取随机运算符 char getSignal() {     char signal[CALC_KIND]={'+','-','*','/'};     srand((unsigned)time(NULL));     return signal[rand()%4]; }  //获取随机数 int get_random(void) {     int i;     i=rand() % 100;     return (i); }   //运算 int getResult(int num1,int num2,char signal) {     float res;     switch(signal)     {         case '+':             res=num1+num2;break;         case '-':             res=num1-num2;break;         case '*':             res=num1*num2;break;         case '/':             res=num1/num2;break;         default:             res=0;             printf("运算符不符合规则\n");     }     return res; }  //int checkresult(int h) //{ //    float res; //    res=getresult(num1,num2,signal); // if (int(res)!=res|res>=100) h=0; // else h=1; // return h; //}  //列出10道题 void takeTest() {     printf("开始答题，每道题10分，总共100分\n");     clock_t startTime;     startTime=clock();     int index;     int res;     int giveRes;     int l,k,h;     int num1;     int num2;     int score=0;     char signal;     for(index=0;index<CALC_NUM;index++)     {         signal=getSignal();          srand((unsigned)time(NULL));         if(signal=='+'||signal=='-')         {             num1=get_random();             num2=rand()%(100-num1);         }         if(signal=='-')         {             num1=get_random();             num2=rand()%num1;         }         res=getResult(num1,num2,signal);         if(res>100||res<0) k=0;         else k=1;         if(signal=='*')         {             num1=get_random();             num2=rand()%(100/num1);         }         if(signal=='/')         {             do             {                 num1=get_random();                 num2=rand() % num1;                 int c;                 c=num1/num2;                 if(num2*c==num1) h=1;                 else h=0;             }while(h==0);         }          printf("%d%c%d=",num1,signal,num2);         scanf("%d", &giveRes);         //fflush(stdin);         if(getResult(num1,num2,signal)==giveRes)         {             printf("correct\n");             score+=10;         }         else         {             printf("wrong\n");         }     }     FILE *fp=fopen("score.txt","w");     fprintf(fp,"分数为%d",score);     fclose(fp);     printf("解10道题用了%lf秒\n",(double)(clock()- startTime)/CLOCKS_PER_SEC); }  //检测idNo是否合规则，合规则返回true bool checkNo(char idNo[]) {     int index;     bool flag;     flag=true;     for(index=0;index<IDNO_LENGTH;index++)     {         if(index<2)         {             if(!isalpha(idNo[index]))             {                 flag=false;                 printf("ID no 不符合规则，重新输入：");                 break;             }         }         else         {             if(!isdigit(idNo[index]))             {                 flag=false;                 printf("ID no 不符合规则，重新输入：");                 break;             }         }     }     return flag; }  以上是修改你的代码； 问题主要是以下几点： 1. idNo是数组名，因此scanf输入时，要去掉前面的&，数组名本身就是地址呢； 2. fflush(stdin);fflush操作stdin是未定义行为；所以使用fflush对stdin不一定有效，如果需要建议使用其他方式；从你的程序里暂为发现需要fflush，清空输入缓冲区； 3. ch应定义成int类型，因为EOF在系统上定义的是-1,并且这个-1是int类型的-1;  4. 文件打开方式，建议将w+改成r+，因为你的操作主要是读，没有写。 5. random函数名，建议不要和库函数名重名，建议改成get_random，符合函数功能的名字； 6. 注意，fgetc读到的数字1，实际上是'1'，使用时，建议注意下。