我正在尝试从用户提示符开始一个字符串数组并命名该数组。无论我怎么写,我都会一直收到错误。我不确定是否需要在[]中添加虚构数字。
@Html.TextBoxFor(m => m.PeriodEnd, new { type = "date", @class = "datepicker" })
答案 0 :(得分:0)
将循环视为与函数分离。你一遍又一遍地声明namelen
,但只在循环内部。它不能在循环外使用。您的情况namelen[i] = int
也不是真实情况。在namelen[i]
是整数时,您是否尝试让循环继续运行?这没有任何意义,因为int
与char
不同。
我认为您需要澄清您的问题和代码。很难说出你在这里想做什么。
如果我不得不猜测,您希望代码与以下内容更加一致:
int main(void)
{
char namelen[49];
printf("What is your name?\n");
gets(namelen);
printf(namelen);
}
答案 1 :(得分:0)
我会使用这样的代码:
#define NAME_MAXLEN 50
int main(void)
{
char name[NAME_MAXLEN];
do
{
printf("What is your name?\n");
scanf("%s", name);
}
while (!validate_name(name));
// Do whatever you need with the name array.
}
int validate_name(const char *name)
{
int i;
for (i = 0; name[i] != '\0'; i++)
{
char c = name[i];
if (!(c >= 'A' && c <= 'Z') &&
!(c >= 'a' && c <= 'z') &&
c != ' ')
{
return 0;
}
}
return 1;
}
函数scanf
将获取用户的输入并将其存储在name
数组中。之后,输入将由validate_name()
函数验证。如果名称无效,则循环将再次执行,直到给出有效名称。
validate_name()
函数将逐个扫描name
字符串的字符,搜索不是字母或空格的字符。如果找到一个,则该字符串被视为无效,并返回零。如果没有找到,则返回1,这意味着给定的名称是正确的。
此代码仅在用户键入短于50个字符的名称时才有效,因为这是我静态分配给我的字符串的字符数。如果您需要更多字符,可以增加该数字,这很简单有效。您还可以使用动态分配内存,这样您就可以分配一个足够大的初始内存以适应用户条目,然后释放多余的内存,但该解决方案不必要地复杂。