注册 登录
编程论坛 C语言论坛

怎么把scanf()函数中的\n去掉

kuaisha 发布于 2018-09-23 18:07, 3820 次点击
程序代码:
#include <stdio.h>
#define MUNBER 40
struct mane{
    char surname[MUNBER];//姓氏

    char called[MUNBER];//

    char middle[MUNBER];//名和姓中间的名字

};
struct socialSecurity{
    int serialnumber[MUNBER];
};



int main(void)
{
    int n=0;
    int q=0;
    struct mane person[MUNBER];
    struct socialSecurity people[MUNBER];
    while(n<=MUNBER)
    {
    printf("请输入名:");
    gets(person[n].called);
    printf("请输入名和姓中间的名字:");
    gets(person[n].middle);
    printf("请输入姓:");
    gets(person[n].surname);
    printf("请输入社保号:");
    scanf("%d",&people[n].serialnumber);
    printf("%s %s %.1s-%d\n",person[n].called,person[n].surname,person[n].middle,people[0].serialnumber);
    printf("退出请按1,不退请按2.\n");
    scanf("%d",&q);
    if(q==1)
    {
        break;
    }

    n++;
    }
    return 0;
}
只有本站会员才能查看附件,请 登录

scanf()读取了\n,怎么把它去掉啊,或者有什么函数可以输入数字并把\n去掉的?


[此贴子已经被作者于2018-9-23 18:17编辑过]

6 回复
#2
Mr_doge2018-09-23 18:44
你的问题是输入的社保号123变成奇怪数字么,还是别的,如果你需要的是让scanf()函数不读入\n,那你什么都不用做,scanf()不会读取空格和\n(至少在第一轮输入没有滞留\n的时候不会有问题)
如果你要解决的问题是社保号存入异常,那么这是另外的原因导致的
社保号,那么就是存入一串数字字符,不应该考虑当作整数变量来存储,因为太长容易溢出,那么你的社保号存储的结构声明就不合适了,因为你的结构内存储的成员是一个int类型的数组,这个暂且不提,显示数值异常应当考虑是否没有成功写入数据,还是无法写入?
至于scanf()函数在读取所需内容后在缓冲区滞留了\n这个问题,可以通过在scanf()语句下一句添加该代码丢弃多余的\n:
while(getchar()!='\n')
    continue;

另外还有一个情况,就是错误的输出格式导致的显示异常,这个也要考虑

[此贴子已经被作者于2018-9-23 18:46编辑过]

#3
forever742018-09-23 19:19
不要想岔了,这个和\n没啥关系,
因为你的serialnumber是个数组名,数组名表示数组首元素的首地址,所以你输出的那个数字是这个地址。
#4
kuaisha2018-09-24 15:04
回复 3楼 forever74
怎么让它输出123?
#5
kuaisha2018-09-24 15:15
回复 2楼 Mr_doge
我怎么确定一串数字一个是整数变量还是数字字符,另外我调试过了,我的123输入成功,但为什么是错误输出。另外,我试过拿while(getchar()!='\n')改成while(scanf()!='\n'),为什么这样子就不行,scanf()不是也读取\n吗。
#6
豆豆的滴2018-09-24 19:15
getchar()?
#7
kfyniriu2018-09-24 21:03
1、两个结构体可以合并成一个结构体
2、int类型,可以存储最大的整数位65535,需要用字符数组存入社保号  char serialnumber[MUNBER];
3、代码内容没有看出scanf 读取了'\n'
4、确实没理解,你想要问的准确的问题是什么,是不显示你输入的社保号还是输入2不退出后出现的问题?
1