| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 535 人关注过本帖
标题:帮我解决个问题
只看楼主 加入收藏
windyfzz
Rank: 2
等 级:禁止访问
帖 子:90
专家分:12
注 册:2010-7-25
结帖率:68%
收藏
已结贴  问题点数:20 回复次数:3 
帮我解决个问题
#include<iostream>   
#include<fstream>   //程序意图:
#include<stdlib.h>  //输入一行字符,把其中的字母放到磁盘文件file中。在把它从磁盘文件读入程序
using namespace std;//把其中的小写字母改为大写字母,在存入磁盘文件file2中,同时在屏幕上输出
void save_file()
{
    char str[80];
    int i;
    ofstream outfile("file1.txt");
    if(! outfile)
    {
        cerr<<"open error!"<<endl;
        exit(1);
    }
    cin.getline(str,80);
    for(i=0;str[i]!=0;i++)
    {
        if(str[i]>=65&&str[i]<=90||str[i]>=97&&str[i]<=122)
        {
            outfile<<str[i]<<" ";
            
        }
    }
    outfile.close();
}
void from_file()
{   char str;
    ifstream infile("file1.txt");
    if(! infile)
    {
        cerr<<"open error!"<<endl;
        exit(1);
    }
    ofstream outfile("file2.txt");
    if(! outfile)
    {
        cerr<<"open error!"<<endl;
        exit(1);
    }

    while(infile.get(str))
    {
      if(str>=97&&str<=122)
      {
          str-=32;
          outfile<<str<<" ";
          cout<<str<<" ";
      }
   
    }
    infile.close();
    outfile.close();
}
int main()
{
   
    save_file();
    from_file();
    system("PAUSE");
    return 0;
}

1.谁能告诉我for(i=0;str[i]!=0;i++)中为什么是str[i]!=0(这里的0是什么意思呢?)
2.为什么我把void save_file()中的改为for(i=0;str[i]!='\n';i++)屏幕显示的结果后面无缘无故的多了一些字母
呢!例如我输入 Hello, world!  正确的显示应该是 E L L O W O R L D.
但是此时却显示E L L O W O R L D P R O O O C D X.
搜索更多相关主题的帖子: 磁盘 字母 include file 
2010-07-25 19:12
mxs810
Rank: 9Rank: 9Rank: 9
来 自:火星
等 级:贵宾
威 望:16
帖 子:234
专家分:1122
注 册:2006-10-19
收藏
得分:10 
1、for(i=0;str[i]!=0;i++)中为什么是str[i]!=0(这里的0是什么意思呢?)
    应该表示的是str结束吧?
2、为什么我把void save_file()中的改为for(i=0;str[i]!='\n';i++)屏幕显示的结果后面无缘无故的多了一些字母
    设置断点,单步跟踪,看一下str中的内容就得到答案了~~

祝你好运,要找到调试程序的基本方法。

授人以鱼不如授人以渔
2010-07-25 20:19
JINyuanbao
Rank: 2
等 级:论坛游民
帖 子:9
专家分:13
注 册:2010-7-20
收藏
得分:10 
开始是设置的是str[i]!=0其实就是str[i]!='\0' 因为nul ,0,\0 的ASCII码是相同的。意思是为空。运行到str[12]就结束了

而你后面的 str[i]!='\n' 意思是回车换行。而你在换行之前你有又用cin.getline(str,80);你给这个字符串分配了80个字符空间。所以等到你运行完一行后才会结束。而在你运行时你后面的字符未初始化所以系统随机分配。 P R O O O C D X至于这几个字符我看了一下应该是系统随机分配的。不过我测试了几组数据看起来又像有点规律。没研究出来他是怎么来的。希望哪位高手来说说具体原理吧。
2010-07-25 22:25
windyfzz
Rank: 2
等 级:禁止访问
帖 子:90
专家分:12
注 册:2010-7-25
收藏
得分:0 
恩,谢了!
2010-07-25 23:03
快速回复:帮我解决个问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024758 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved