char sen[255];
int i;
printf("please input a sentence:\n");
for(i=0;i<255;i++)
{
scanf("%c",&sen[i]);
if(sen[i]=='\n')
break;
}
i = strlen(sen);
i = i -2;
for(;i>-1;i--)
{
putchar(sen[i]);
}
追问
谢谢,但是我用strlen()函数,再让他反向输出,为什么有特殊古怪的符
号
这是因为strlen()这个函数有问题。它得到的是字符串的长度,但是,这个长度是从字符串开始直到遇到结束符'\0'为止的长度,你的程序里面字符串sen并没有正常的结束符,所以用strlen来获得字符串长度是不准确的,此时得到的长度是大于真正的字符串长度的,所以会出现乱码
解决的方案是你在输入结束时人为的添加一个结束符
#include<stdio.h>那为什么其他字符串就没有这个问题呢?比如说akfjlakjfoajk askjf/.akl;ak;f hjd我随便打的,他就没与这样的问题
追答那是编译器的问题,正是由于系统给后面空间随机分配了值,才会导致strlen测得的值不准。不知道你用的什么编译器,我用的VS2010不管输入什么,只要没有字符串结束标志,就会乱码!但是会逆序显示正确,是只是把你输入的序列逆序了,i=i-1或者i=i-2,i-3,4,5,6,7都是可以的(当然大到一定的值就不可以了,这个值就看你所用的编译器了),区别是乱码的长度不同!
输出了啊,谁说没有
追问是输出了,但不正常,就是这样,你看他上面有特殊的符号,为什么会这样,其他输入就没有这个问题
追答好,我找找原因,稍等。手头正好在写别的程序,有点慢不好意思哈。
第一个发现,只要超过6个字符,就会有笑脸,继续找。。。
第二个发现,我加了一句显示,发现你那个 i = strlen(sen);取得的长度是错误的,如图
仔细试了一下,发现长度错的离谱,输入数字的数量改变,一直都是17,输入更多数字,变成31了,应该是strlen用错了。但是这个东西我不熟,考虑帮你改掉。
改好了:
去掉那个函数,输入时加个变量累计一下数量就好了
#include<stdio.h>
void main()
{
char sen[255];
int i,k=0;
printf("please input a sentence:\n");
for(i=0;i<255;i++)
{
scanf("%c",&sen[i]);
k++ ;
if(sen[i]=='\n')
break;
}
printf("%d\n",k);
k = k -2;
for(;k>-1;k--)
{
putchar(sen[k]);
}
}
就这样了,如果你希望用那个函数改好,请自行查找资料哈,我就不奉陪了~
C语言,遇到一个奇怪的事情,分享下,一个倒序输出的问题,其他都能顺利...
include<stdio.h>#include<math.h>int main(){ char sen[255]; int i; printf("please input a sentence:\\n"); for(i=0;i<255;i++) { scanf("%c",&sen[i]); if(sen[i]=='\\n') break; } i--;\/\/只需让i的值-1即可 for(;i>-1;i--...
C语言 逆序输出问题
include <stdio.h>#include <stdlib.h>#include <string.h>int main(void){ char *p; char c[] = " "; char s[1024],*t,z[1024]; int flag = 1; while(gets(s)){ if(s[0] == '#'){ } else if(s[0] != '#'){ p = strtok(s,c); ...
【求助】C语言考试要求做个字符倒序输出,结果...不说了,上图。
或者还有一个更好的算法,可以节省空间。就是不用str2。在for循环里面直接把对应的两个字符交换顺序就行了。比如:hello 那么h 对 o, e 对 l。char x;for(i = 0; i <= a \/ 2; ++i){ j = a - i; x = str1[i]; str1[i] = str1[j]; str1[j] = x;}上面...
汇编语言 如何倒序输出hello world
三个方法:1、定义字符串时倒序。2、一个一个字符发,寻址时偏移量指向字符串末端,发一个字符偏移量减一。3、倒序迁移字符串到内存再发送。
C语言问题简单的很,菜鸟送分,在线等,超级高分,给我讲明白,否则关闭问题...
p--; \/\/令p指向字符串中的前一位 \/\/此时,p指向了字符串的最后一位 for( ; t > 0 ; t-- ) \/\/从后往前输出字符串的每一位,t每减小1就输出了一个字符,t=0的时候恰好每一位都已输出 { printf("%c",*p);p--; \/\/令p指向字符串的前一个字符 } printf("\\n");} ...
c语言 while(p--!=str) 什么意思
char str[]="Hello"; \/\/ 字符串里面有结束符标志是 '\\0'\/\/ 注意这里有个分号,这算是一个完整的while循环while(*p++!='\\0'); \/\/ p指向了最后一个字符O,退出while循环 while(p--!=str) \/\/此时p指向的是str最后一个字符 printf("%c",*p); \/\/ p--,即一步步指向...
我有个PASCAL语言编程问题!!急
我是个编程初学者从0起点开始自己编了个输入a和b的数值,然后输出sum的程序,运行时老不成功下面是程序program kjk;vara,b:integer;sum:integer;beginread(a,b);sum:=a+b;end.调试正常,可一运行想输入a和b,刚按一下键盘,程序就结束了。倒底是什么问题呀???另外给个pascal的教程网站好吗?? 展开 ...