当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 7 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 学习C语言遇到个小问题,大家请看看。
帖子发表于 : 2014-11-30 17:02 

注册: 2007-01-10 9:32
帖子: 1038
送出感谢: 4
接收感谢: 5
要求时这样的,从终端输入一串字符,回车结束输入。然后反序打印输入的内容。
如果我输入的速度慢点,反序输出的开头几个字符没有乱码,输入快点,就有乱码了,请大家看看。


附件:
error_c.png
error_c.png [ 111.27 KiB | 被浏览 4265 次 ]



_________________
ubuntu技巧 http://wiki.ubuntu.org.cn/index.php?tit ... 6.E5.8C.BA
页首
 用户资料  
 
2 楼 
 文章标题 : Re: 学习C语言遇到个小问题,大家请看看。
帖子发表于 : 2014-11-30 18:11 
头像

注册: 2011-08-17 12:54
帖子: 287
送出感谢: 0 次
接收感谢: 4
line[]输入以后没有结束啊 加个'\0'才能用strlen


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 学习C语言遇到个小问题,大家请看看。
帖子发表于 : 2014-11-30 20:50 

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


我慢慢输入就没问题。

另外这个话改成下面这样就可以了:
代码:
   for (index = strlen(line) - 1; index >= 0; index--) {
      printf("%c", line[index]);
   }


_________________
ubuntu技巧 http://wiki.ubuntu.org.cn/index.php?tit ... 6.E5.8C.BA


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 学习C语言遇到个小问题,大家请看看。
帖子发表于 : 2014-12-05 11:10 
头像

注册: 2008-09-18 13:11
帖子: 2741
送出感谢: 1
接收感谢: 446
实际就是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内容全部清零

个人推荐第二种


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 学习C语言遇到个小问题,大家请看看。
帖子发表于 : 2014-12-05 11:59 

注册: 2007-01-10 9:32
帖子: 1038
送出感谢: 4
接收感谢: 5
谢谢大家的回复,问题确实是前面讲的那个引起的。修改后的程序没有再用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;
}


_________________
ubuntu技巧 http://wiki.ubuntu.org.cn/index.php?tit ... 6.E5.8C.BA


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 学习C语言遇到个小问题,大家请看看。
帖子发表于 : 2015-05-01 9:39 
头像

注册: 2012-01-22 11:37
帖子: 111
送出感谢: 13
接收感谢: 2
scanf可以直接读取一行的,程序或许你可以简化如下哦~
代码:
#include <stdio.h>

int main(int argc, char *argv[])
{
    char line[1024]="";
    scanf("%[^\n]", line);
    printf("%s\n", line);
    return 0;
}


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 学习C语言遇到个小问题,大家请看看。
帖子发表于 : 2016-11-11 16:25 

注册: 2016-11-09 13:52
帖子: 15
系统: ubuntu
送出感谢: 2
接收感谢: 0 次
楼主使用什么写C程序的啊? :em06 :em06


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 7 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译