C - 确保用户输入的长度合适

时间:2015-02-23 00:45:13

标签: c newline fgetc

我认为那些非常基本的东西让我感到难过。

如果我有char数组char menuInput[3];并执行fgets(menuInput,3,stdin);,我可以轻松检查他们是否输入任何内容:

if(menuInput[0]=='\n')
   {
    printf("******You made no selection.******");
   }

或者如果他们输入太多(在这种情况下,多于一个)字符:

else if(menuInput[1]!='\n')
{
   printf("******Invalid Selection: Please enter a single digit option.******");
   break;
 }

在这种情况下,用户输入的字符数不正确,数量恰当(一)或太多。

给我带来麻烦的是检查他们何时可以输入任何字符,最多n金额或太多。

如果我有char surname[SURNAME_MAX + 1];,并使用fgets(surname,SURNAME_MAX + 1,stdin);,其中SURNAME_MAX为12,我就无法确定如何检查输入是否属于可接受的& #39;范围。

我可以轻松查看用户是否输入了任何内容(if surname[0]='\n'),以及他们是否输入了12个字符(第13个字符为'\n')。

我认为事情的关键在于确保在某个地方surname[SURNAME_MAX + 1]包含' \ n'但我不知道在C中如何做到这一点。

此致

道格

编辑:好的,我正在使用@R Sahu的答案,但是我无法正常工作。

我最多只能期待SURNAME_MAX定义的12个字符。

这应该意味着,通过该答案,我的数组应为surname[SURNAME_MAX+3]("至少需要SURNAME_MAX + 2来存储换行符和终止空字符")

然后我fgets(surname,SURNAME_MAX + 3,stdin);然后它应该是:

while(strlen(surname)>SURNAME_MAX+2);
      {
         printf("Input is too long!\n");
         printf("Surname (1-12 characters): ");
         fgets(surname,SURNAME_MAX + 2,stdin);
      }

这是实现答案的正确方法吗?

它看起来对我来说,但是,无论我输入什么,我都会得到"输入太长了!"消息。

编辑2:我的不好,有些代码在错误的地方,现在都很好。

3 个答案:

答案 0 :(得分:2)

你说:

  

给我带来麻烦的是检查他们什么时候可以输入任何字符,最多不输入数量或者输入太多字符。

我的建议:如果您希望查看最多N个字符,请创建一个大小大于N+2的数组。您至少需要N+2来存储换行符和终止空字符,并在该字符串上使用fgets。如果字符串的长度大于N+1,那么您知道它们输入了太多字符。检测他们输入的字符是否太少很简单。我想你能搞清楚。

答案 1 :(得分:0)

要查找字符串中的字符,可以使用strchr方法:

  char *pch;
  pch=strchr(SURNAME,'\n');
  if (pch != NULL)
    {
      // ok we've got \n in string
    }

但我不确定这是解决问题的最佳方式。

答案 2 :(得分:0)

建议将用户输入与变量检查/赋值分开。

首先阅读用户输入

 char buf[100];
 if (fgets(buf, sizeof buf, stdin) == NULL) {
   // EOF or IO error occurred. 
   return;
 }

现在有资格输入;存在各种方法。

 int len = strlen(buf);
 // lop off potential \n
 if (buf > 0 && buf[len-1] == '\n') buf[--len] = 0;
 if (len >= sizeof surname) {
   // Input too long
   return;
 }
 memcpy(surname, buf, len + 1);