C语言,这个输出结果后面为什么会这样?

我不用puts()、gets(),怎么修改?

你这里有一个笔误
if(*(p+i-1)=' '&&'a'<=*(p+i)&&*(p+i)<='z')//找到空格后的首字符
---->
if(*(p+i-1)==' '&&'a'<=*(p+i)&&*(p+i)<='z')//找到空格后的首字符

这里就C语言的缺陷和陷阱,
对于这样的问题,C编译器不会报错
将==判断的常量写在左边是个好的习惯,这样编译器就可以在编译的阶段就报错了,例如:
本意是要做如下判断
if(a == 0), 写成了 if(a=0) 编译器是不会报错的,
如果把if(0 == a) 写成了 if(0=a)编译器就会报错

所以,把判断等式的常量写在左边,是一个好的编程习惯,
建议你看看<< 高质量C程序>> 这本书
温馨提示:内容为网友见解,仅供参考
无其他回答

c语言,如图,输出结果为什么是这样?
因为c语言对副作用生效点没有做规定,所以这个东西什么结果只有神仙才知道:vs2017的结果:x86 release模式:x86 debug模式:这种代码叫神经病代码,要避免这种结果的唯一方法就是不要写这样的代码 但是有考试题还就是出这样的题,那就只好听天由命了 ...

c语言数据输出中为什么会后面多出字符串
C语言在输出x时 从x指向的内容开始输出,一直到'\\0'为止 用char *定义x,会自动在末尾加上'\\0'但用char []定义x,可能末尾没有'\\0'如:char x[3]={'a','b','c'};此时系统输出x+2指向的'c'后 x+3不一定指向'\\0'系统将会继续输出 直到发现'\\0'为止 所以C语言用字符串一定要特别...

C语言 题目 为什么输出后会反过来?
你这是属于函数的递归调用,先递归到有结果的时候,就是能输出的时候,是先输出递归到最后时的状态,逐渐执行到你第一次调用的状态

c语言问题,为什么输出结果第二个是个类似地址的
for(j=0;j<9-i;j++){ --- 这个第一次循环,如果i=0的话,那么就是for(j=0;j<9;j++),会访问到a[9],导致数组越界了。正确的冒泡排序算法为:for(i=0;i<8;i++){ for(j=i;j<8;j++) { if(a[i] > a[j]) { XXXX即可 } }} ...

c语言输出input is wrong!为什么后面会有数字?
c语言输出input is wrong!后面会有数字,这通常是因为字符串后面的串结束符,也就是空字符丢失或者没有赋值造成的。请赋值str[15]='\\0';然后再进行输出,就没有这个现象了。另外还需要保证这个字符数组的大小至少要有16个字符才可以。否则会造成数组溢出从而导致这种现象的发生,或造成...

C语言printf("%s",a);输出数组后面有乱码,为什么?
那可能是你的数组没有初始化吧,前面你赋值了,但是后面是随机值,打印出来就是乱码

C语言编程哪里不对,为什么输出会有后面的字符?
这段C语言代码问题在于for.循环中退出条件不对,把for里面i<99换成a[i]即可。

C语言文件输出时,输入数据后为什么会出现乱码
struct studentType),1,fp)!=1) 简单看了下,这行有问题,往文件里写的时候是把一个字符串写进去,stud[i]是一个struct,强行把它序列化的话,内存中的存储不是连续的,这样写就会写入一些没用的数据,导致出错。考虑一下怎么把struct序列化,再看看struct的中的字节是怎么对齐的,建议而已 ...

c语言输出结果为什么会多出6个空格?
因为前面 a%c b%c 会输出aa bb占了5个字符(注意aa和bb之间有个空格)所以遇到\/t的时候会跳到第8个字符处(即多出3个空格)开始输出cc 然后又是\\t,于是再跳到第2*8=16个字符处(多出6个空格)再输出后面的abc 所以最终输出结果是:aa bb cc abc 中间空白处分别是1个空格...

c语言输完数字后面跟一个逗号为什么不对?
33 就应该 22,33。2、也可以像这样scanf("%d %d",&a,&b);中间用空格隔开,那样就可以直接输入 22 33了。scanf 的功能用一句话来概括就是“通过键盘给程序中的变量赋值”。该函数的原型为:include <stdio.h> int scanf(const char *format, ...);它有两种用法,或者说有两种格式。

相似回答