学习C语言遇到个小问题,大家请看看。

C、C++和Java语言
回复
drongh
帖子: 1038
注册时间: 2007-01-10 9:32
送出感谢: 4 次
接收感谢: 5 次

学习C语言遇到个小问题,大家请看看。

#1

帖子 drongh » 2014-11-30 17:02

要求时这样的,从终端输入一串字符,回车结束输入。然后反序打印输入的内容。
如果我输入的速度慢点,反序输出的开头几个字符没有乱码,输入快点,就有乱码了,请大家看看。
附件
error_c.png
头像
dryland718
帖子: 287
注册时间: 2011-08-17 12:54
送出感谢: 0
接收感谢: 4 次

Re: 学习C语言遇到个小问题,大家请看看。

#2

帖子 dryland718 » 2014-11-30 18:11

line[]输入以后没有结束啊 加个'\0'才能用strlen
drongh
帖子: 1038
注册时间: 2007-01-10 9:32
送出感谢: 4 次
接收感谢: 5 次

Re: 学习C语言遇到个小问题,大家请看看。

#3

帖子 drongh » 2014-11-30 20:50

dryland718 写了:line[]输入以后没有结束啊 加个'\0'才能用strlen
我慢慢输入就没问题。

另外这个话改成下面这样就可以了:

代码: 全选

	for (index = strlen(line) - 1; index >= 0; index--) {
		printf("%c", line[index]);
	}
头像
astolia
论坛版主
帖子: 3019
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 495 次

Re: 学习C语言遇到个小问题,大家请看看。

#4

帖子 astolia » 2014-12-05 11:10

实际就是2楼说的问题,跟你输入快慢没关系。你的所谓解决方法也完全没用。
输出的乱码是栈空间里的数据,这个可以认为是随机的。你可以在char line[255],ch;后面加入如下代码:

代码: 全选

    for (int i=1;i<255;i++) {
        if (line[i]==0) {
            printf("%d ",i);
        }
    }
    printf("\n");
这样就输出了不会产生乱码的输入字符串长度,只要的输入的长度是列出的数字之一,不管你输入多快多慢都不会有问题,否则必然出错。
你觉得输入慢就不会出错时因为你慢慢输入时的字符串长度刚好撞上了上面列出的数字之一

真正的解决方法有下面几种
1、在while循环后面加上一句

代码: 全选

line[index]=0
2、把for循环改成

代码: 全选

for (index--;index>=0;index--) {
3、在while循环之前把line内容全部清零

个人推荐第二种
drongh
帖子: 1038
注册时间: 2007-01-10 9:32
送出感谢: 4 次
接收感谢: 5 次

Re: 学习C语言遇到个小问题,大家请看看。

#5

帖子 drongh » 2014-12-05 11:59

谢谢大家的回复,问题确实是前面讲的那个引起的。修改后的程序没有再用strlen,这个是string的函数。
修改后代码如下。

代码: 全选

#include "stdio.h"
#include "string.h"

int main(int argc, char const *argv[])
{
	char line[255], ch;
	int count = 0;
	while ((scanf("%c", &ch) == 1) && (ch != '\n')) {
		line[count] = ch;
		count++;
	}

	for (int index = count; index >= 0; index--) {
		printf("%c", line[index]);
	}

	printf("\n");
	return 0;
}
头像
scue
帖子: 111
注册时间: 2012-01-22 11:37
送出感谢: 12 次
接收感谢: 2 次

Re: 学习C语言遇到个小问题,大家请看看。

#6

帖子 scue » 2015-05-01 9:39

scanf可以直接读取一行的,程序或许你可以简化如下哦~

代码: 全选

#include <stdio.h>

int main(int argc, char *argv[])
{
    char line[1024]="";
    scanf("%[^\n]", line);
    printf("%s\n", line);
    return 0;
}
H奇点
帖子: 15
注册时间: 2016-11-09 13:52
系统: ubuntu
送出感谢: 2 次
接收感谢: 0

Re: 学习C语言遇到个小问题,大家请看看。

#7

帖子 H奇点 » 2016-11-11 16:25

楼主使用什么写C程序的啊? :em06 :em06
回复

回到 “C/C++/Java”