C 未在while循环中注册字符

C 未在while循环中注册字符,c,input,while-loop,C,Input,While Loop,我不明白为什么我的while循环在输入时找不到#。我希望当我在输入name:下输入时,循环中断,这样e.name将具有 当我尝试它时,循环永远不会结束,但是e.name将包含# 在您的while声明中: while(e.name[0] != "#") 您正在将字符与指针进行比较。指针是字符串“#”的内存地址。您必须将代码更改为: while(e.name[0] != '#') 有很多问题,但这应该让你开始,有时确保所有的空白(空格、换行符、标签等)都被使用是一项挑战 // My guess

我不明白为什么我的while循环在输入时找不到#。我希望当我在
输入name:
下输入时,循环中断,这样
e.name
将具有

当我尝试它时,循环永远不会结束,但是
e.name
将包含
#


在您的while声明中:

while(e.name[0] != "#")
您正在将字符与指针进行比较。指针是字符串“#”的内存地址。您必须将代码更改为:

while(e.name[0] != '#')

有很多问题,但这应该让你开始,有时确保所有的空白(空格、换行符、标签等)都被使用是一项挑战

// My guess at employee structure
typedef struct
{
    char name[100];
    char telno[25];
    int id;
    double salary;
} Employee;

// NOTE: MSVC "forces" me to use safe version of some funtions: "_s" suffix

int readin(Employee *p)
{
    Employee e = *p;
    int count = 0; // <-- Never used

    char line[80];

    // Why are you looping, you only ever modify 1 employee?
    while (e.name[0] != '#') // <- Fixed comparison
    {
        printf("Enter name:\n");
        //scanf("\n"); <- Not needed
        gets_s(e.name);
        //*Test for '#' here and exit loop before entering other fields?

        printf("Enter tel:\n");
        //scanf("\n"); <- Not needed
        //scanf_s("%s", &e.telno, 25);
        gets_s(e.telno, 25);

        printf("Enter id:\n");
        //scanf("\n"); <- Not needed
        //scanf_s("%d", &e.id);
        //*scanf leaves trailing white (newline), I usually prefer gets/sscanf combination
        gets_s(line, sizeof(line));
        sscanf_s(line, "%d", &e.id);

        printf("Enter salary:\n");
        //scanf("\n"); <- Not needed
        //scanf_s("%lf", &e.salary);
        //*scanf leaves trailing white (newline), I usually prefer gets/sscanf combination
        gets_s(line, sizeof(line)); // 
        sscanf_s(line, "%lf", &e.salary);
    }

    *p = e;

    return 0; // <- Added, function declared to return an int, what do you want to return?
}
//我对员工结构的猜测
类型定义结构
{
字符名[100];
char-telno[25];
int-id;
双薪;
}员工;
//注意:MSVC“强制”我使用一些函数的安全版本:“\u s”后缀
int readin(员工*p)
{
雇员e=*p;

int count=0;/
e.name[0]!=“#”
->
e.name[0]!=“#”
。不要使用
gets
而是使用
fgets
scanf(%s),&e.telno)
scanf(%s),e.telno)
(我想最好)。scanf
scanf(“\n”)
的意思是
scanf(“\n”)
。启用所有关于编译器的代码警告,同时警告(
{
比在stack-overflow上发布更快。因此,一个包含结构定义等的完整示例。我可以提供帮助。你能提供一个完整的示例吗?它会帮助我。
// My guess at employee structure
typedef struct
{
    char name[100];
    char telno[25];
    int id;
    double salary;
} Employee;

// NOTE: MSVC "forces" me to use safe version of some funtions: "_s" suffix

int readin(Employee *p)
{
    Employee e = *p;
    int count = 0; // <-- Never used

    char line[80];

    // Why are you looping, you only ever modify 1 employee?
    while (e.name[0] != '#') // <- Fixed comparison
    {
        printf("Enter name:\n");
        //scanf("\n"); <- Not needed
        gets_s(e.name);
        //*Test for '#' here and exit loop before entering other fields?

        printf("Enter tel:\n");
        //scanf("\n"); <- Not needed
        //scanf_s("%s", &e.telno, 25);
        gets_s(e.telno, 25);

        printf("Enter id:\n");
        //scanf("\n"); <- Not needed
        //scanf_s("%d", &e.id);
        //*scanf leaves trailing white (newline), I usually prefer gets/sscanf combination
        gets_s(line, sizeof(line));
        sscanf_s(line, "%d", &e.id);

        printf("Enter salary:\n");
        //scanf("\n"); <- Not needed
        //scanf_s("%lf", &e.salary);
        //*scanf leaves trailing white (newline), I usually prefer gets/sscanf combination
        gets_s(line, sizeof(line)); // 
        sscanf_s(line, "%lf", &e.salary);
    }

    *p = e;

    return 0; // <- Added, function declared to return an int, what do you want to return?
}