确定输入是数字还是字符串,然后将其打印回来

时间:2015-09-04 08:40:34

标签: c

我刚开始学习c而且我正在阅读有关输入的内容。让我们说我想要一个c程序来识别你输入的是一个数字或字符串(不只是一个字符),然后打印出来。像这样的Somethihng:

   int input, is_digit;
   is_digit = scanf("%d", input);
   printf("Please enter a digit or a string and then a newline\n");
   if (is_digit)
     printf("You entered the digit: %d", &input);
    else
     printf("You entered the string: %s", &input);

这并不像预期的那样有效,但我写了这篇文章是为了让我知道我想要完成的事情。

你将如何在C中做到这一点?

5 个答案:

答案 0 :(得分:1)

您需要先将所有输入作为字符串,然后解析此输入以检查它是否为数字。如果条件失败,您可以确定输入是字符串 -

看看下面的演示代码 -

fgets(s, sizeof(s), stdin);
valid = TRUE;
for (i = 0; i < strlen(s); ++i)
{
    if (!isdigit(s[i]))
    {
        valid = FALSE;
        break;
    }
}

答案 1 :(得分:0)

首先,当使用scanf以%d格式扫描时,您将获得以下其中一项:

  1. 扫描一个int,然后无需检查
  2. 无限循环 - 因为用户输入错误,然后无需检查。
  3. 如果要扫描用户输入,则应使用其他一些功能,如getchar。

    isdigit()库中有一个函数<ctype.h>可帮助您迭代字符串并确定char是否表示int here

    示例:

    char* str = "abc1";
    int counter=0;
    while(counter < 4){
      if(isdigit(*(str+counter))){
        printf("digit")
      };
      counter++;
    }
    

答案 2 :(得分:0)

您可以使用getchar()ungetc()的组合查看stdin上的第一个字符,使用isdigit()确定它是否为数字,然后将其放回流中阅读相应的scanf

答案 3 :(得分:0)

首先,在阅读用户输入之前,您必须先询问用户,然后:

BASE/share/autoconf/autoconf/c.m4

其次,printf("Please enter a digit or a string and then a newline\n"); is_digit = scanf("%d", &input); 想要一个指向int的指针,如果是%d格式,那么

scanf

第三,scanf("%d", &input); ,要打印一个int,想要值,然后:

printf

第四,你无法打印传递printf("You entered the digit: %d\n", input); 变量的字符串(%s),那么你的代码就完全错了。

一个简单的解决方案可能是,使用isdigit标准函数,这个

int

答案 4 :(得分:0)

您从scanf收到的输入采用ascii格式,请参阅Ascii Table

  

所有数字(0-9)都在ascii值之间:48-57(十进制)。

您应该首先输入一个数字/字符并以整数格式(%d)打印出来。将它与ascii表进行比较。只是为了感受它。

完成后,您应该继续完成任务。考虑到你希望能够解释字符和数字,我会用字符串而不是数字来读。有关如何阅读字符串的信息,请参阅scanf

声明具有预定大小的char。并且一定不要用scanf溢出它。

然后应考虑以下事项:

  1. 如果至少有一个字符不是数字,则应将其视为字符串。
  2. 简单地说,您创建一个while循环(或for循环),只要找到null终止符就会中断。这是字符串的结尾。

    在循环中,你有一个int,每轮递增(从0开始)。此int是一次读取一个字符的索引。继续读取字符,只要ascii值不是数字(参见上面的ascii值),你设置一个标志来表明它是一个字符串。这将使你走上正轨。