请教一个C语言输入问题

我编写了一个关于输入一个字符串,但在输入字母和 ' . '以外的符号时,会告诉用户'error!', 假如输入的全部都是数字以及符号' . '时, 那么就会将该字符串转换为浮点数, 以下是我的代码:

#include<stdio.h>
#include<stdlib.h>
int main()
{
  int i;
  int n=1;
  char c[100];
  printf("input: ");
  scanf("%s", &c);
  while(n != 0)
    {
      n=0;
      for(i=0;i<100;i++)
        {
        if((c[i]<'0' || c[i]>'9') && c[i] != '.' && c[i] != '\0')
          {
          n++;
        }
      }
      if(n != 0)
      {
        printf("error!\n");
        printf("input: ");
        for(i=0;i<100;i++)
        {
          c[i]='\0';
        }
         scanf("%s", &c);
  }
  num = atof(c);
  printf("Your number is : %f", num);
}

开始编译的时候
input: qwert // 第一次开始
error!
input: 12345
Your number is: 12345.000000
input: 12345 // 第二次开始
error!
input: 12345
Your number is: 12345.000000
input: 1wqwr21 // 第三次开始
error!
input: eqwe21
error!
input: 12345
Your number is: 12345.000000
它的运行结果第一次无论我输入什么总会报错,我曾想过调整while括号里面n的判断条件, 可是这样会出现输入字母还会显示在输入字母的情况下就显示Your number is: 0.000000

请问, 如何将这段代码变成第一次运行结果输入数字不会报错的情况呢

但在输入字母和 ' . '以外的符号时----应该是输入数字和'.'以外吧?

for(i=0;i<100;i++)这是错的,实际输入哪有100个啊,你要检查的是实际输入的字符数,而不是数组申请的大小
另外if(n!=0)这段结束时要continue
for循环改为:

i=0;
whilec[i] != '\0')
{
   if((c[i]<'0' || c[i]>'9') && c[i] != '.')
    {
          n++;
          break;
    }
    i++;
}