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

C:启动并命名字符串数组,c,arrays,string,C,Arrays,String,我试图从用户提示开始一个字符串数组,并命名该数组。不管我怎么写,我总是会出错。我不确定是否需要在[]中添加虚构的数字 do { printf("What is your name?\n"); char str[] = get_string(); 'error: array initializer must be an initializer list or string literal' } while (namelen[i] =

我试图从用户提示开始一个字符串数组,并命名该数组。不管我怎么写,我总是会出错。我不确定是否需要在[]中添加虚构的数字

    do
    {
        printf("What is your name?\n"); 
        char str[] = get_string(); 'error: array initializer must be an initializer list or string literal'
    }
    while (namelen[i] = int); //error: use of undeclared identifier 'namelen'    
char str[49] = namelen;  //error: use of undeclared identifier'namelen'

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

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

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

int main(void)
{
    char namelen[49];
    printf("What is your name?\n");
    gets(namelen);

    printf(namelen);
}

我会使用如下代码:

#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;
}
#定义名称_MAXLEN 50
内部主(空)
{
字符名[name_MAXLEN];
做
{
printf(“您叫什么名字?\n”);
scanf(“%s”,名称);
}
而(!validate_name(name));
//使用名称数组执行任何需要的操作。
}
int validate_name(常量字符*名称)
{
int i;
对于(i=0;名称[i]!='\0';i++)
{
char c=名称[i];

如果(!(c>='A'&&c='A'&&c)您的代码段错误且与错误消息不同步…发布与您发布的源代码相对应的实际错误消息。如果您在do范围内声明
namelen[]
,而数组仅是该范围内的有效引用。
char str namelen[]
不是有效的C代码,也不是
namelen[i]=int
您需要在外循环中声明
namelen
例如
char x,y,*namelen;
name=get_string();
char str[50];strncpy(str,namelen,50);str[49]=0;您的问题是什么?目标不清楚“从用户提示开始一个字符串数组并命名该数组”。
gets()
在C99中已经贬值,因为C11不再是C标准库的一部分。建议一个替代方案。感谢您的帮助。我将仔细研究一下。从用户处获取名称的目的是提取首字母缩写,大写,然后将其打印到终端。