c语言运行时如何使换行符不算字符

如题所述

在缓冲输入中,换行符的确是个麻烦的问题,在这里做一个总结。

1.getchar()

记住:getchar()函数 读取每一个字符!每一个!包括空格,制表符和换行符。

错误代码:

while(getchar()!=‘y’)

printf(“Well,then it is %d?\n”,++guess);

这里会出现输入一个n,但是出现两句“Well……”

原因是因为换行符也被传输进去了。

换行符当然不等于’y’,所以输出两次!

正确代码:

while(getchar()!=‘y’)

{

printf("………");

while(getchar()!=’\n’)

continue;

}

2.scanf()

记住:scanf()读取数字时会跳过空格,制表符和换行符。并且是把换行符 留在输入队列中!是留在!!!

如果读取数字时,你输入了非数字的字符,那么它也是把它留在输入队列!是留在!!!

错误代码:

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

{

scanf("%d %d",&a,&b);

display(a,b,ch); //一个函数

}

输入一次运行正常,但到第二次,就不正常了。还没等你输入,就退出了。

原因就是scanf()把换行符留在了队列中,所以当输入ch后,按下了回车,输入队列中还剩下了’\n’

但是,scanf是不读’\n’的。所以第二次执行while循环时,getchar读取的是’\n’。所以就退出了。

正确代码:

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

{

scanf("%d %d",&a,&b);

while(getchar()!=’\n’)

continue;

display(a,b,ch);

}

3.gets()

记住:gets()是输入一整行的。它是 丢弃换行符!记住,是丢弃!!!而puts()是自带换行符的。所以二者搭配使用。

使用gets()的危险在于,可能会导致缓冲区溢出(buffer overflow)。如果这些多余的字符擦去了重要程序数据,会导致程序异常中止!

4.fgets()

记住:fgets()会把换行符放在字符串末尾!也就是 读取换行符!!!而fputs()不会自带换行符,所以二者搭配使用。

另外,fgets()有三个参数,第一个是数组地址,第二个是读入字符最大数量,第三个是指明要读入的文件。

错误代码:

fgets(words,SLEN,stdin);

puts(words);

这会导致多个空行!

应该改成fputs(words);

如何处理掉fgets()中读取的换行符?

(1)

int i=0;

while(words[i]!=’\n’)

i++;

words[i]=’\0’;

(2)

如果你想舍弃未读取的字符,干脆

while(getchar()!=’\n’)

continue;

简单粗暴,换行符也一同没了。

4.gets_s()

记住:gets_s()函数读到换行符,是 舍弃!舍弃啊!!! 另外,gets_s()只有两个参数,因为只从标准输入中读取数据,所以跟fgets()相比不需要第三个参数
温馨提示:内容为网友见解,仅供参考
无其他回答

c语言运行时如何使换行符不算字符
1.getchar()记住:getchar()函数 读取每一个字符!每一个!包括空格,制表符和换行符。错误代码:while(getchar()!=‘y’)printf(“Well,then it is %d?\\n”,++guess);这里会出现输入一个n,但是出现两句“Well……”原因是因为换行符也被传输进去了。换行符当然不等于’y’,所以输出两次!正...

c语言输入字符的时候我要换行,怎么弄使得换行不被读入
使用getchar();例如:include<stdio.h>int main(){char a[100],b[100];scanf("%s",a);getchar();scanf("%s",b);puts(a); puts(b);return 0;}\/*运行结果:123abc123abc*\/

C语言中,输入一个字符不等于空格也不等于换行怎么表达?
if(m !=' ' && m !='\\n') \/\/第一个单引号中间留个空格。

C语言下面代码如何跳过空格和换行等
i++;printf("%c=%d ",sz,sz);if((i%8)==0)\/\/每8个字符打印一个换行 printf("\\n");} }

C语言下面代码如何跳过空格和换行等
int main(void){ int sz,ch;int i=0;printf("请输入字符按#号键结束\\n");while((sz=getchar())!='#'){ ch=getchar();putchar(sz);printf("%c=%d ",sz,sz);i++;if((i%8)==0)\/\/每8个字符打印一个换行 printf("\\n");} } 我在第九行加了 ch=getchar();用来吸收换...

C语言如何去掉字符串中换行符
C语言可以使用Replace函数去掉字符串中换行符。即Replace(字符串,'\n','')。Replace函数语法为Replace (Expression, Find, ReplaceWith [, Start] [, Count] [, Compare])。Expression必需的。代表将要执行替换操作的字符串。Find必需的。代表要搜索的字符串。ReplaceWith必需的。代表用于替换的...

C语言如何去掉字符串中换行符
C语言提供了Replace函数来移除字符串中的换行符,其操作方式为Replace(源字符串, '\n', 空字符串)。此函数的使用方法较为直观,其基本语法为Replace (Expression, Find, ReplaceWith)。Expression参数是必需的,它指定了进行替换操作的字符串。Find参数同样必需,表示要从源字符串中查找的特定字符序列...

如果字符串后有换行符\\n,C语言程序中怎么去掉
假设这个字符串在s字符数组中,一句s[strlen(s)-1]='\\0';就可以了。

c语言 怎样按回车 结束输入 不读入换行到地址
用一个getchar()把最后的换行符清除出输入流 比如说你先用一个scanf输入了一个字符串 然后你想再输入一个字符 这个时候你应该先getchar一下,因为换行符仍然在输入流中 之后就可以进行正常的输入了(用getchar gets scanf随你乐意)

c语言,从字符串中删除所有的换行符(换行符后面的字符前移)
在C语言中,处理字符串时,要移除其中的换行符,可以通过一系列步骤来实现。首先,定义一个名为`removeNewlines`的函数,接受一个指向字符数组的指针。接下来,使用while循环遍历输入的字符串,当遇到换行符时跳过,将非换行符字符复制到新的位置。重要的是,每次复制后,确保保留字符串的原始长度,以便于...

相似回答
大家正在搜