我认为那些非常基本的东西让我感到难过。
如果我有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:我的不好,有些代码在错误的地方,现在都很好。
答案 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);