首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

fgets + stdin :可以跳过前2个字符吗?

fgets函数是C语言中用于从标准输入流(stdin)中读取一行字符的函数。它的原型为:

代码语言:txt
复制
char *fgets(char *str, int n, FILE *stream);

其中,str是用于存储读取字符的字符串指针,n是最大读取字符数(包括换行符和终止符),stream是输入流指针。

对于fgets函数来说,它会读取输入流中的一行字符,直到遇到换行符或者读取字符数达到最大值n-1为止。读取的字符包括换行符,并将其存储在str指向的字符串中,最后添加一个终止符'\0'。

根据fgets函数的特性,如果想跳过前2个字符,可以通过读取一行字符后,将前2个字符从字符串中删除或者忽略。以下是一个示例代码:

代码语言:txt
复制
#include <stdio.h>
#include <string.h>

int main() {
    char str[100];
    fgets(str, sizeof(str), stdin);

    // 跳过前2个字符
    memmove(str, str + 2, strlen(str) - 1);
    printf("跳过前2个字符后的字符串:%s\n", str);

    return 0;
}

在上述示例中,我们使用了memmove函数将字符串中的前2个字符移动到起始位置,从而实现了跳过前2个字符的效果。

需要注意的是,fgets函数读取的字符包括换行符,因此在跳过前2个字符后,可能会导致输出结果中存在换行符。如果需要去除换行符,可以使用strcspn函数将换行符替换为终止符'\0'。

总结起来,fgets函数可以读取一行字符,并且可以通过操作字符串来实现跳过前2个字符的效果。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C语言字符串IO

常见的一个错误写法:scanf要把信息拷贝到参数指定的地址上,而此时的参数是一个未初始话的指针,那么可以指向程中的任意的地址,可能会擦写掉程序中的数据和到,导致程序中断。...fgets()函数 fgets函数和gets函数的区别: fgets函数的第二个参数指明了读入字符的最大数量。如果参数是n则读取n-1个字符,或读到遇到的第一个换行符为止。...程序中的fgets函数一次读入STLEN-1个字符(本案例中为9个字符),所以它第一次只读取了by the wa,并存储为by the wa\0,接着fputs函数打印该字符串,并且为换行。...两者容易混淆的原因是:它们都可以用数值0表示,但是,从概念上看,两者是不同类型的0。 空字符是一个字符,占1个字节;而空指针是一个地址,通常占4字节。...= '\n') continue; } return 0; } 分析:如果fgets函数返回了NULL说明读到文件结尾或出现了错误,s_gets()函数跳过了这个过程

4.6K10

CCPP输入输出函数汇总分析

头文件中定义了标准的输入和输出,分别是stdin,stdout. arg_list可以是变量名,也可以是表达式,但最终都会以值的形式填充进format中. getc() int getc(FILE *fp...它与getchar()函数类似,不同之处在于getc()可以用于从任意文件读取字符,而getchar()只能读取标准输入(stdin)。...每次输入一行: getchar 是一个标准库函数,可以读取一个字符(从标准输入(stdin)读取)。...scanf()跳过空白字符开始读取第一个非空白字符,并保存非空白字符直到遇到下以恶搞空白字符,这意味这%s转换说明只能读取不包含空白地府的字符串,scanf会在字符序列的末尾加上\0,让数组中的内容形成一个字符串...除了%c,其它的转换说明都会自动跳过待输入值前面的空白。

1.8K20

C语言训练:三个字符串比较大小,实现两个整数数的交换统计二进制中1的个数

, 100, stdin);//使用fgets函数获取字符串s1 printf("请输入第二个字符串:\n");//提示用户输入第二个字符fgets(s2, 100, stdin);...//使用fgets函数获取字符串s2 printf("请输入第三个字符串:\n");//提示用户输入第三个字符fgets(s3, 100, stdin);//使用fgets函数获取字符串...fgets(s2, sizeof(s2), stdin);//使用fgets函数获取字符串s2 printf("请输入第三个字符串:\n");//提示用户输入第三个字符fgets...;//定义两个字符串 printf("请输入第一个字符串:\n");//提示用户输入第一个字符fgets(s1, 100, stdin);//使用fgets函数获取字符串s1...printf("请输入第二个字符串:\n");//提示用户输入第二个字符fgets(s2, 100, stdin);//使用fgets函数获取字符串s2 printf("请输入第三个字符

12310

C语言实践总结

在C语言中,stdin stdout stderror 三个标准输入输入,stdou输出到屏幕有缓冲,stderror 输出的屏幕没有缓冲。这三个标准输入输出相当于三个设备文件,可以读写。...,formmat,.....)等价scanf(frommat,....) fgets(stream *file,formmat,.....)中的fgets(stdin,formmat,.....)等价于...(stdin,formmat,.....)等价于putc() 2.getchar getc ,getche getch区别   getchar 是getc 的宏定义,有缓冲,有回显。...这也是敲了一连串字符串回车后,getchar可以循环读取多个字符。  getche 没缓冲,只要按键按下去,就可以读取字符,不需要回车,但有回显。 类似的 putchar putc putche 。...2.sprintf的常用方法:将一个格式化后字符串输入到另一个字符串 1).用来字符串转换      int  k=124;     char buf[100];     sprintf(buf,"%s

42020

C语言中从键盘输入字符串时的一些问题

’\n’ 3). fgets()函数在连续输入多个字符串时(也不能算是fgets()函数的缺点) , 但有时也会给我们带来麻烦) , 例如: char str1[10]; char str2[10...此时fgets()在输入str2时直接读取了缓冲区的 jklm\n由于遇到了’\n’(或者读入了(n – 1)个字符)再存入’\0’,此时str2的输入已经完成 , 并不需要我们再次输入 ....N]; printf("请输入字符串str\n"); fgets(str, N, stdin); printf("请输入字符串str1\n"); fgets(str1, N, stdin); printf...("请输入字符串str2\n"); fgets(str2, N, stdin); printf("str为:\n%s\n", str); printf("str1为:\n%s\n", str1); printf...我们也可以利用输入单个字符的函数与循环来输入一个字符串 举个例子 , 如以下代码 : #define _CRT_SECURE_NO_WARNINGS #include #include

1.7K20

小朋友学C语言(42):gets和fgets

{ char str[10]; gets(str); puts(str); return 0; } (1)在Windows系统中的运行结果 hello hello (2)...return 0; } 运行结果 在windows下输入: a hi 输出 string=hi char=a 在windows下重新输入 a uvwxyz 输出 string=uvw char=x 这里可以看出来...,定义了s的长度为3,但是用gets()输入字符串的时候,并不会去检查字符串的长度,所以导致char的值不是a,而是”uvwxyz”中的第四个字符’x’。...然后fgets()函数向末尾添加一个空字符以构成一个字符串。如果在达到字符最大数目之前读完一行,它将在字符串的空字符之前添加一个换行符以标识一行结束。...title.in,scanf或fgets从title.in中读取数据 freopen("title.in", "r", stdin); // stdout,标准输出流,默认是显示器,重定向到

1.3K10

写一个自己的命令行解释器

在bash这个进程内创建子进程,并让子进程去执行全新的代码,这不就是程序替换? 所以我们让子进程去执行程序替换,在我们的程序内执行命令,那我们不就是写了一个自己的命令行解释器?...,但是这里还存在着几个问题 1.使用ls指令没有颜色区别:这是因为少了一个“–color=auto”选项的原因,我们可以对部分指令做适当的枚举来解决这个问题 2.cd ..无法回退到上级路径:这和当前进程的当前路径有关...如果不太懂可以去看看博主的基础IO:基础IO 也就是说只要使用dup2系统调用更改fd中struct file*的指向即可,当我们完善这个功能以后一个简单命令行解释器也就完成了。...start++; if(*start=='>')//说明是追加重定向,start还要向后挪动一个位置 { start++;//后面可能有空格,要跳过空格...函数获取输入的指令 我要将其切割出来 char *s=fgets(LineCommand,sizeof(LineCommand)-1,stdin);//将stdin中输入的字符放到LineCommand

1.2K10

CCPP输入输出函数汇总分析

头文件中定义了标准的输入和输出,分别是stdin,stdout. arg_list可以是变量名,也可以是表达式,但最终都会以值的形式填充进format中. getc() int getc(FILE *fp...= EOF.EOF为文件结束标志, 定义在stdio.h中,就像EXIT_SUCCESS,EXIT_FAILURE定义在stdlib.h中一样,文件也可以被理解为一种流,所以当fp为stdin 时,getc...,所以并不是在屏幕中敲上一个字符程序就会运行,一般是通过在屏幕上敲上回车键,然后将回车前的字符 串放在缓冲区中,getchar就是在缓冲区中一个一个的读字符.当然也可以在while循环中指定终止字符,如下面的语句...不大于num-1.因为fgets函数会在末尾加上一个空字符以构成一个字符串.另外fgets在读取到换行符后不会将其省略. fputs() int fputs(char *str, file *fp)...c- 流(由stdin所指的流,是标准输入文件的逻辑代表),所以getchar=getc(stdin); 原因:同getc 补充:同getc 每次输入一行: fgets(); 格式:#include <

1.2K20

CCPP基础PTA习题及分析

数组 数组排位 已知素数序列为2、3、5、7、11、13、17、19、23、29……,即素数的第一个是2,第二个是3,第三个是5……那么,随便挑一个数,若是素数,能确定是第几个素数?...} int main() { char arr[500]={0}; fgets(arr,500,stdin); cout<<strlen(arr)<<endl; return...输入格式: 第一行是一个字符串,不超过100个字符; 第二行是一个字符。 输出格式: 删除指定字符后的字符串。 输入样例: 在这里给出一组输入。...else printf("%c",a[i]); } return 0; } 判断输入的日期是否正确 功能: 判断传入日期是否合法传入格式:四位是年...+a[b][c]; } } } printf("%d",d); return 0; } 易错点: 注意奇数行和偶数行对角线之和不同,偶数行的对角线数之和是可以直接相加的

1.4K30

C语言常用的字符串函数及案例

值,可以利用这一机制检测是否到达文件末尾,如果未遇到EOF则返回之前传递给它的第一个参数地址。...fgets函数地区输入一直到第一个换行符的后面(’\n‘),或读到文件结尾,或者读取SYTLEN-1个字符,然后fgets函数在末尾添加一个空字符(’\0‘)使之成为一个字符串,因此循环判断while(...如果n个字符完全相同,则返回0;如果第一个字符串比第二个字符串小,则返回一个小于0的值;如果第一个字符串比第二个字符串大,则返回一个大于0的值。...str2:指向第二个字符串的指针。 n:要比较的字符数。 返回值: 如果n个字符完全相同,则返回0。 如果str1 < str2,则返回一个小于0的值。...它的功能与strcpy()相似,不同的是strncpy()可以限制复制字符的数量。

85410

5. 很“迷”的字符与字符串

因为在读入字符串的过程中,机器需要知道他从哪里读到哪里,这个时候需要'\0'表示一个字符串的结束。 定义字符串有以下2种方式: ? 这里的定义利用了一些数组的知识,将在后面介绍。 ?...getchar()用于从标准输入流stdin读入一个字符,并返回这个字符。如果读到文件结尾,则返回EOF。注意到EOF不能用char类型表示,所以getchar()函数返回的是一个int型的数。...如果使用scanf()会造成将一个字符串首先读入第一个空格的部分,其余部分会残留在输入缓冲区的情况,在下次读取时可能会出现错误。...其次为了避免出现上述问题,必须要在读取输入,清空缓冲区的残留数据,可以用以下的方法解决: (1) 使用fflush(stdin)函数。...所以建议使用fgets()读入字符串。 好啦,今天的内容就到这里了。有什么宝贵意见都可以提出来的~喜欢的话可以转发到朋友圈和微信群哦~

1.2K20

CCPP基础PTA习题及分析

数组 数组排位 已知素数序列为2、3、5、7、11、13、17、19、23、29……,即素数的第一个是2,第二个是3,第三个是5……那么,随便挑一个数,若是素数,能确定是第几个素数?...} int main() { char arr[500]={0}; fgets(arr,500,stdin); cout<<strlen(arr)<<endl; return...输入格式: 第一行是一个字符串,不超过100个字符; 第二行是一个字符。 输出格式: 删除指定字符后的字符串。 输入样例: 在这里给出一组输入。...else printf("%c",a[i]); } return 0; } 判断输入的日期是否正确 功能: 判断传入日期是否合法传入格式:四位是年...+a[b][c]; } } } printf("%d",d); return 0; } 易错点: 注意奇数行和偶数行对角线之和不同,偶数行的对角线数之和是可以直接相加的

68140
领券