-3

我是新手,面临一个基本问题,无法使用 getchar 打破 while 循环。以下代码编译成功,但只显示“请输入名称”并继续从键盘输入输入的字符,但不会在输入新行时中断特点 :-(

#include<stdio.h>

typedef struct employee
{
    char name[20];
    int age;
    char country[20];
}emp;

void getinfo(char *str, const char *param)
{
    int i;
    char ch;
    if (strcmp(param,"NAME" ) == 0)
    {
        printf("\nPlease enter NAME \n");
    }
    else if(strcmp(param, "COUNTRY") ==0)
    {
        printf("\nPlease enter COUNTRY \n");
    }
    while((ch==getchar())!= '\n')
    {
        str[i] = ch;
        i++;
    }
    str[i]= '\0';
}

int getage(int *age)
{
    printf("\n Please enter Age \n");
    scanf("%d",age);
}

int main(void)
{
    emp e1;
    getinfo(e1.name, "NAME");
    getinfo(e1.country, "COUNTRY");
    getage(&e1.age);
}

请提供帮助。

4

3 回答 3

4

while((ch==getchar())!= '\n')

应该读

while((ch=getchar())!= '\n')
         ^

否则,您将比较chto的(未初始化的)值getchar(),而不是分配getchar()to的结果ch

于 2013-01-26T10:32:52.580 回答
2
while((ch==getchar())!= '\n')

该行当前是未定义的操作,因为ch尚未分配任何内容。让我们假设ch==getchar()是假的,false != '\n'是真的,因为任何非零都是真的,并且 '\n' 大于零。

我假设您想将==in更改ch==getchar()为单个=.

于 2013-01-26T10:33:49.490 回答
0

你已经输入了while((ch==getchar())!='\n')
这个语句调用getchar()并比较垃圾值,并且 通常ch比较它,所以while循环继续执行,即使没有分配任何东西 所以,把它改成'\n'
truech
while((ch=getchar())!='\n')

于 2013-01-26T10:45:50.783 回答