mougety 2021-11-24 19:33 采纳率: 100%
浏览 33
已结题

请教一个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

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

  • 写回答

1条回答 默认 最新

  • CSDN专家-link 2021-11-24 19:36
    关注

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

    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++;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 12月2日
  • 已采纳回答 11月24日
  • 创建了问题 11月24日

悬赏问题

  • ¥15 多址通信方式的抗噪声性能和系统容量对比
  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答