C:启动并命名字符串数组

时间:2017-03-06 20:27:03

标签: c arrays string

我正在尝试从用户提示符开始一个字符串数组并命名该数组。无论我怎么写,我都会一直收到错误。我不确定是否需要在[]中添加虚构数字。

@Html.TextBoxFor(m => m.PeriodEnd, new { type = "date", @class = "datepicker" })

2 个答案:

答案 0 :(得分:0)

将循环视为与函数分离。你一遍又一遍地声明namelen,但只在循环内部。它不能在循环外使用。您的情况namelen[i] = int也不是真实情况。在namelen[i]是整数时,您是否尝试让循环继续运行?这没有任何意义,因为intchar不同。

我认为您需要澄清您的问题和代码。很难说出你在这里想做什么。

如果我不得不猜测,您希望代码与以下内容更加一致:

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个字符的名称时才有效,因为这是我静态分配给我的字符串的字符数。如果您需要更多字符,可以增加该数字,这很简单有效。您还可以使用动态分配内存,这样您就可以分配一个足够大的初始内存以适应用户条目,然后释放多余的内存,但该解决方案不必要地复杂。