【问题标题】:How to read only digits from input (no letters, just digits) in C?如何在C中只读取输入中的数字(没有字母,只有数字)?
【发布时间】:2024-05-03 19:20:03
【问题描述】:

不久前你帮我读了一行。现在,我只想从输入中读取数字 - 没有字母,只有 5 位数字。我该怎么做?

我的解决方案无法正常工作:

int i = 0; 
while(!go)
    {
        printf("Give 5 digits: \n\n");
        while( ( c = getchar()) != EOF  &&  c != '\n' &&  i < 5 )
        {
            int digit = c - '0';
            if(digit >= 0 && digit <= 9)
            {
                input[i++] = digit;
                if(i == 5)
                {
                    break;
                    go = true;
                }
            }
        }
    }

【问题讨论】:

  • "没有字母,没有数字,只有数字" - 数字不是数字吗?
  • @PaulD.Waite:是的,我不知道如何解释:)
  • 您能告诉我们您的代码发生了什么吗?这样更容易诊断。
  • 如果一个数字和一个数字是同一个东西,那么说“没有数字,只有数字”绝对不是解释它的方式。如果与您的问题相关的数字和数字之间存在区别(这似乎更有可能),请解释一下。
  • if(i == 5) { break; go = true; } go=true;无法到达。顺便说一句:这应该是 循环条件

标签: c input error-handling user-input


【解决方案1】:

试试这个:

#include<stdio.h>
int main()
{
char  c;
        while( ( c = getchar()) != EOF  &&  c != '\n' &&  c >= 48  && c <= 57 )
        {
          printf("%c\n",c);
        }
return 0;
}

【讨论】:

  • 这段代码有几个错误:c应该是int(否则会错误识别EOF),缩进出来了,你和使用字符文字不一致他们的 ascii 等价物(例如 48 而不是 '0')。此外,“getchar”既回显又似乎在返回之前等待换行符。
  • 它也不记录输入,它试图在每个字符之间添加一个换行符,它没有解决只读取五位数字的问题。
【解决方案2】:

使用break 语句,go = true; 将永远不会被执行。因此循环while (!go) 是无限的。

#include <ctype.h>
#include <stdio.h>

int i = 0;
int input[5];

printf ("Give five digits: ");
fflush (stdout);

do
{
  c = getchar ();

  if (isdigit (c))
  {
    input[i] = c - '0';
    i = i + 1;
  }
} while (i < 5);

【讨论】:

    最近更新 更多