C语言 输出 问号
#include<stdio.h>#definemaxline1000voidreverse(charori[],charrev[],intlen);intlength(...
#include <stdio.h>
#define maxline 1000
void reverse(char ori[], char rev[], int len);
int length(char line[]);
int main()
{
int len;
char ori[maxline];
char rev[maxline];
len = length(ori);
reverse(ori, rev, len);
printf("the reverse line is:\n %s", rev);
}
void reverse(char ori[], char rev[], int len)
{
int i;
for (i = 0; i <= len; ++i)
rev[len - i] = ori[i - 1];
rev[++i] = '\n';
rev[++i] = '\0';
}
int length(char line[])
{
int c, i;
for (i = 0; (c = getchar()) != EOF && c != '\n'; ++i)
line[i] = c;
if (c == '\n')
{
++i;
line[i] = c;
}
++i;
line[i] = '\0';
return i-2;
}
想写反转一行的program;
输入test
输出的是 tset烫
想知道为什么会有这个空格和烫
之前用rev[len+1]='\n'和rev[len+2]='\0'时则出现了问号 搞不懂原因啊 展开
#define maxline 1000
void reverse(char ori[], char rev[], int len);
int length(char line[]);
int main()
{
int len;
char ori[maxline];
char rev[maxline];
len = length(ori);
reverse(ori, rev, len);
printf("the reverse line is:\n %s", rev);
}
void reverse(char ori[], char rev[], int len)
{
int i;
for (i = 0; i <= len; ++i)
rev[len - i] = ori[i - 1];
rev[++i] = '\n';
rev[++i] = '\0';
}
int length(char line[])
{
int c, i;
for (i = 0; (c = getchar()) != EOF && c != '\n'; ++i)
line[i] = c;
if (c == '\n')
{
++i;
line[i] = c;
}
++i;
line[i] = '\0';
return i-2;
}
想写反转一行的program;
输入test
输出的是 tset烫
想知道为什么会有这个空格和烫
之前用rev[len+1]='\n'和rev[len+2]='\0'时则出现了问号 搞不懂原因啊 展开
3个回答
展开全部
空格的原因是printf("the reverse line is:\n %s", rev);这句里面有一个空格(你的格式是换行后空格输出 所以有一个空格)
至于烫的原因 是
for (i = 0; i <= len; ++i)
rev[len - i] = ori[i - 1];
是当i=0的时候引用了ori[-1]是位置的内存,所以出现的
改为
for (i = 1; i <= len; ++i)
rev[len - i] = ori[i - 1];
就行了
ps:你用的是Windows编译器 谢谢采纳
至于烫的原因 是
for (i = 0; i <= len; ++i)
rev[len - i] = ori[i - 1];
是当i=0的时候引用了ori[-1]是位置的内存,所以出现的
改为
for (i = 1; i <= len; ++i)
rev[len - i] = ori[i - 1];
就行了
ps:你用的是Windows编译器 谢谢采纳
更多追问追答
追问
i=0改成i=1还是有烫啊
而且i=0之后有++1 所以i-1不会是-1的
追答
怎么不会啊
++i是循环里面最后才执行的啊
for (i = 0; i <= len; ++i)
rev[len - i] = ori[i - 1];
相当于
i=0;
while(l<=len) {
rev[len - i] = ori[i - 1];
++i;
}
//刚刚少了一句
rev[++i] = '\n';
rev[++i] = '\0';
改为
rev[len] = '\n';
rev[++i] = '\0';
即可
展开全部
改了下,你对照看……
#define maxline 1000
void reverse(char ori[], char rev[], int len){
int i;
for(i=0; i<len; ++i)
rev[len - i-1] = ori[i];
rev[len] = '\0';//后面有个"烫"就是这里没有弄对.
}
int length(char line[]){
int c, i;
for(i = 0; (c = getchar()) != EOF && c != '\n'; ++i)
line[i] = c;
++i;
line[i] = '\0';
return i-1;
}
void main(void){
int len;
char ori[maxline];
char rev[maxline];
len = length(ori);
reverse(ori, rev, len);
printf("the reverse line is:\n%s", rev);//前面一个空格是你在%前加入了' '
}
#define maxline 1000
void reverse(char ori[], char rev[], int len){
int i;
for(i=0; i<len; ++i)
rev[len - i-1] = ori[i];
rev[len] = '\0';//后面有个"烫"就是这里没有弄对.
}
int length(char line[]){
int c, i;
for(i = 0; (c = getchar()) != EOF && c != '\n'; ++i)
line[i] = c;
++i;
line[i] = '\0';
return i-1;
}
void main(void){
int len;
char ori[maxline];
char rev[maxline];
len = length(ori);
reverse(ori, rev, len);
printf("the reverse line is:\n%s", rev);//前面一个空格是你在%前加入了' '
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
for (i = 0; i <= len; ++i)错了,
应该for (i = 0; i < len; ++i)
应该for (i = 0; i < len; ++i)
追问
改成<还是不对啊 还出现了新的乱码
输入test 返回蘳et?
追答
#include <stdio.h>
#define maxline 1000
void reverse(char ori[], char rev[], int len)
{
int i;
for (i = 0; i < len; ++i)
rev[len-1 - i] = ori[i];
rev[len]=0;
}
int length(char line[])
{
int c, i;
for (i = 0; ; ++i)
{
c = getchar();
if (c== EOF || c == '\n') break;
line[i] = c;
}
line[i] = 0;
return i;
}
int main()
{
int len;
char ori[maxline];
char rev[maxline];
len = length(ori);
reverse(ori, rev, len);
printf("the reverse line is: %s\n", rev);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询