C语言 “吞字符” 加不加‘\n‘ ---- #145. 最长的名字

在做一道海贼oj的C语言题目,我输入n为3

但发现一直少了一次输入机会

后来发现是出现 “吞字符”

#include <stdio.h>
#include <string.h>
int main() {
   int n,j;
   char x;
   char max[100] = " ";
   scanf("%d",&n);    //  这里的scanf 出现"吞字符"  ,可以在%d后面加/n 变成%d/n

  // 或者在这里添加一行  getchar();

    for(int i=0;i<n;++i,j=0){
                char name[100] = " ";
 
        while(scanf("%c",&x)!=EOF){
          if(x!='\n')  name[j++] = x;
            else{
                if(strlen(name)>strlen(max)) strcpy(max,name);  
                break;  
            }
        }

    }


    printf("%s\n",max);

    return 0;
}

“吞字符” 原因分析

为什么 n 为 3,但只能输入两个值  ?

1. 用户输入了什么? 程序实际读取了什么? 输出结果是什么

用户输入

3 // 3'\n'

tom /

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
c语⾔程序⽂件的写法,C语⾔-⽂件 所谓"⽂件"是指⼀组相关数据的有序集合,该数据的集合的名字就是⽂件名。⽂件可以分为很多类,如源程序⽂件、⽬标⽂件、可执⾏⽂ 件、库⽂件等等。 ⽂件通常是存放在外部介质上的(例如磁盘等),在使⽤时才会被调⼊内存中并执⾏。从⽤户的⾓度来看⽂件可以分为普通⽂件和设备⽂件。 普通⽂件是指存放在磁盘或者其它外部介质上的⼀个有序的集合,可以是源⽂件、⽬标⽂件、可执⾏程序等;也可以是⼀组待输⼊处理的原 始数据,或是⼀组输出的结果。对于源⽂件、⽬标⽂件、可执⾏程序可以称作程序⽂件,⽽输⼊输出数据可以称作数据⽂件。 设备⽂件是指与主机相联的各种外部设备,如显⽰器、打印机、键盘等。在操作系统中,把外部设备也看作是⼀个⽂件来进⾏管理,把他们 的输⼊输出等同于对磁盘⽂件的读写。 从⽂件编码的形式来看,⽂件可以分为ASCII码⽂件和⼆进制码⽂件。ASCII码⽂件也称作为⽂本⽂件,这种⽂件在磁盘中存放时每个字符 对应⼀个字节,⽤于存放相应的ASCII码。 ⼆进制⽂件是以⼆进制编码的⽅式来编写⽂件的。⼆进制⽂件虽然可以显⽰在屏幕上,但是却不能读懂。 ⽂件的指针 在C语⾔中⽤⼀个指针变量指向⼀个⽂件,那么这个指针称为⽂件指针。另外,我们通过⽂件指针就可以对所指的⽂件进⾏各种操作。 ⼀般形式为: FILE* ⽂件变量标识符 解释:FILE应该是⼤写的,它实际上是由系统定义的⼀个结构体,该结构体包含了⽂件名、⽂件状态和⽂件当前位置等信息,因此在编写程 序的时候我们不需要过于关⼼FILE结构的细节部分。 // 案例1: FILE *fp; /*说明: fp表⽰FILE结构的指针变量,通过fp可以找到存放某⼀个⽂件信息的结构变量, 然后按照结构体提供的信息找到该⽂件,并对⽂件进⾏操作。*/ ⽂件的打开和关闭 ⽂件在进⾏读写操作之前,要打开⽂件,当使⽤完后应关闭⽂件。打开⽂件就是建⽴⽂件的各种有关信息,并使⽂件指针指向⽂件,以便进 ⾏其他操作。⽽关闭⽂件就是切断⽂件指针和⽂件之间的关系,换⽽⾔之,就是禁⽌利⽤指针操作⽂件。 在C语⾔中,⽂件操作都是由库函数完成的。如fopen 和 fclose。 1. ⽂件的打开 fopen() fopen() 函数是⽤来打开⼀个⽂件,其⼀般的调⽤形式为: ⽂件指针名 = fopen(⽂件名,使⽤⽂件的⽅式); 注释: ⽂件指针名:必须被说明为FILE类型的指针变量; ⽂件名:被打开⽂件的⽂件名; 使⽤⽂件的⽅式:⽂件的类型和操作要求 // 案例2: FILE* fp; fp = fopen("text","r"); /*说明: 在当前⽬录下打开⽂件text,只允许"读"的操作,并且让fp指针指向该⽂件*/ 使⽤⽂件的⽅式有12种,如下所⽰: "使⽤⽂件⽅ " 意义 " "----------"------------------------------:" ""rt" " 只读打开⼀个⽂本,只允许读" ""wt" " 只写打开或者建⽴⼀个⽂件,只允许写数据" ""at" " 追加打开⼀个⽂件,并在⽂件末尾写数据" ""rb" " 只读打开⼀个⼆进制⽂件,只允许读" ""wt" " 只写打开或者建⽴⼀个⽽进制⽂件,只允许写" ""ab" " 追加打开⼀个⼆进制⽂件,并在⽂件末尾写数据" ""rt+" " 读写打开⼀个⽂件,允许读和写 " " "wt+" " 读写打开或建⽴⼀个⽂件,允许读写" ""at+" " 读写打开⼀个⽂件,允许读,或在⽂件末尾追加数据" ""rb+" " 读写打开⼀个⼆进制⽂件,允许读写" ""wb+" " 读写打开或者建⽴⼀个⼆进制⽂件,允许读写 " ""ab+" " 读写打开⼀个⼆进制⽂件,允许读,或在⽂件末追加数据" 说明: 由r、w、a、t、b、+六个字符拼成,个字符的意义: r(read):读 w(write):写 a(append):追加 t(text):⽂本⽂件,可省略不写 b(banary):⼆进制⽂件 6.+:读和写 // 案例3: FILE* fp; fd = fopen("./text","r"); if (NULL == fd) { printf("open error\n"); exit(1); } // ⽤读"r"的⽅式打开⽂件"./text";若⽂件打开失败时,fp为空,输出open error。 2. ⽂件的关闭 fclose()函数是指当⽂件使⽤完后,需要关闭⽂件。其⼀般形式为: fclose(⽂件指针); // 案例4: fclose(fp); // 说明:正常关闭⽂件时,fclose()函数的返回值是0。若返回⼀个⾮零的值,则表⽰关闭⽂件时发⽣错误 ⽂件的读写 ⽂件的读写是有多重⽅式的,它可以⼀个字节⼀个字节的读或写,也可以是⼀串⼀串的读或

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值