有char和scanf_s()的问题

时间:2013-11-26 10:26:16

标签: c compiler-construction char

我刚开始使用C而且我在编译时遇到了一些麻烦。 似乎编译器经常遇到char问题。 请注意我必须在%c之前放置空格。 现在经过网上研究了一下后我才知道添加,1& flag几乎解决了这个问题,但我宁愿完全解决这个问题,因为它应该像这样工作。 我正在使用Visual Studio 2013 btw。

#include <stdio.h>

void main()
{

  int num;
  char flag;
  while (1)
  {

    printf("Please enter your no.:");
    scanf_s("%d", &num);

    if (num > -1)
    {

      if (num < 10)
      {
        printf("Your number is 1 digit.\n");
      }

      else if (num < 100)
      {
        printf("Your number is 2 digits.\n");
      }

      else if (num < 1000)
      {
        printf("Your number is 3 digits.\n");

      }

      else if (num > 999)
      {
        printf("Your number has a lot of digits.\n");

      }
    }

    else
    {
      printf("Please input a correct value.\n");

    }

    printf("Would you like to countinue? y/n \n");
    scanf_s(" %c", &flag)
    // problem

    if (flag == 'n')
    {
      exit(0);
    }
  }

}

1 个答案:

答案 0 :(得分:0)

您的代码无效,您必须使用scanf_s()指定缓冲区大小。 See the documentation

  

scanfwscanf不同,scanf_swscanf_s要求为c,C,s,S或[类型]的所有输入参数指定缓冲区大小。字符的缓冲区大小作为附加参数传递,紧跟在指向缓冲区或变量的指针之后。

这就是为什么它可以添加拨打电话scanf_s(" %c", &flag, 1);