最好不要用 scanf,我的感觉是我从来没用过这个函数,只有教学中为了简便输入才用。#include <conio.h>
#include <stdlib.h>int GetString(char* buf, int size)
{
    int        i;
    int        c;    for(i = 0; i < size - 1; i++)
    {
        c = _getche();
        if(c == '\r')
            break;
        buf[i] = c;
    }
    buf[i] = 0;    return i;
}int main(int argc, char* argv[])
{
    char    buf[80];
    double    val;
    char    *pchar;    GetString(buf, 80);
    cputs("\r\n");
    val = strtod(buf, &pchar);
    if(*pchar)
        cputs("Not a number!\r\n");
    else
        cprintf("%f\r\n", val);    return 0;
}

解决方案 »

  1.   

    呵呵,scanf也可以int main(int argc, char* argv[])
    {    int z;
        double ka[9]={0,0,0,0,0,0,0,0,0},tmp;    for (z=1;z<=6;++z)
        {
            loop0:printf("\n请输入第%d个数值( 0 结束输入):",z);
            int nret=scanf("%lf",&tmp);
    if(nret==0)
    getchar();
            if (tmp==0) break;
            if (tmp<1e-37||tmp>1) goto loop0;
            ka[z]=tmp;

        } return 0;
    }
      

  2.   

    我试过了,根本不是无限循环,而是直接循环完。
    #include <windows.h>
    #include <stdio.h>
    void main()
    {
        int z;
        double ka[9]={0,0,0,0,0,0,0,0,0},tmp;
    char input[80];
        for (z=1;z<=6;z++)
        {
    loop0: printf("\n请输入第%d个数值( 0 结束输入):",z);
            scanf("%s",input);                    //加此句保证不一下循环完  
            sscanf(input,"%lf",&tmp);
            if (tmp==0) break;
            if (tmp<1e-37||tmp> 1e37)goto loop0;  //由tmp>1改为1e37,是否此句导致无限循环 
            ka[z]=tmp;
        }
    }如输入“345fgfg”,则得345,
    输入“jhjh”,则得上次同一数 
      

  3.   

    输入“51ghgh”无限循环肯定由  tmp>1 引起,因为下次数一直是51。