| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 542 人关注过本帖
标题:请高手们指点指点
只看楼主 加入收藏
jxlghy
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2008-11-20
收藏
 问题点数:0 回复次数:6 
请高手们指点指点
程序要求是:从键盘输入若干行字符(每行长度不等),输入后把它们存储到一磁盘文件。再从文件中读入这些数据,将其中小写字母转换成大些字母后再屏幕输出。下面是程序:
#include<stdio.h>
main()
{     
    int i,flag;
    char str[80],c;
    FILE *fp;
    fp=fopen("text","w");
    flag=1;
    while(flag==1)
   {
    printf("Input string:\n");
    gets(str);
    fprintf(fp,"%s",str);
         printf("continue?");
     c=getchar();
    if((c=='N')||(c=='n'))
    flag=0;
    getchar();
      }
   fclose(fp);
   fp=fopen("text","r");
   while(fscanf(fp,"%s",str)!=EOF)
   {    
      for(i=0;str[i]!='\0';i++)
      if((str[i]>='a')&&(str[i]<='z'))
    str[i]-=32;
       printf("%s\n",str);
    }
    fclose(fp);
}
我的问题是:1.输入3行字符以后,输出的结果会显示在一行,为什么?如何在三行分别显示?
            2.如果输入i am a student 则会分四行输出,如何处理这个问题?
这是谭浩强第二版那本书的文件那一张的最后一题。
望各位高手指正,小弟感激不尽!
搜索更多相关主题的帖子: continue include 键盘 字母 
2008-12-04 19:29
debroa723
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:862
专家分:1954
注 册:2008-10-12
收藏
得分:0 
while(flag==1)
{
    printf("Input string:\n");
    gets(str);
    fprintf(fp,"%s\n",str);//这里,在字符串后面加一个回车符,自然就可以了
    printf("continue?");
    c=getchar();
    if((c=='N')||(c=='n'))
        flag=0;
    getchar();
}
2008-12-04 20:42
jxlghy
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2008-11-20
收藏
得分:0 
以下是引用debroa723在2008-12-4 20:42的发言:

while(flag==1)
{
    printf("Input string:\n");
    gets(str);
    fprintf(fp,"%s\n",str);//这里,在字符串后面加一个回车符,自然就可以了
    printf("continue?");
    c=getchar();
    if((c=='N')||(c=='n'))
        flag ...

这样改是对的,很谢谢你!可是第二个问题我还是不会哦
2008-12-04 23:43
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
收藏
得分:0 
方法1:
 if((fp=fopen("file1.txt","r"))==NULL)
    { printf("文件不能打开.\n");exit(0); }
   printf("\n");
   printf("转成大写后的文件\n");
   while(!feof(fp))
   {   
     fscanf(fp,"%s",str);    //读出串到数组. 但是这样做, 由于fscanf()函数不能接收带空格的串,所以一行中空格分隔处将作为新行输出
     strupr(str); puts(str);
   }
   fclose(fp);
方法2:按字符读取可以保持原有的字符行。
 if((fp=fopen("file1.txt","r"))==NULL)
  {
      printf("文件不能打开.\n");exit(0);
  }
   printf("\n");
   printf("转成大写后的文件\n");
   while(!feof(fp))
   {  
       c=fgetc(fp);  
       if((c>='a')&&(c<='z'))
           c=c-32;
       putchar(c);  
   }
   printf("\n");   
   fclose(fp);
2008-12-05 14:07
debroa723
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:862
专家分:1954
注 册:2008-10-12
收藏
得分:0 
fp=fopen("text","r");
i = 0 ;
while( fscanf(fp,"%c",&str[i]) != EOF )//读取下一个字符,这里并没读一行,而是读一个字符.即使使用%s
{   
    if( str[i]!='\n')//如果不是换行符,表示一行没有结束
    {        
        if((str[i]>='a')&&(str[i]<='z'))
        {
            str[i]-=32;
        }
        ++i ;//游标移动一位
    }else //如果碰到换行符,就打出这句话.
    {
        str[++i] = '\0';//为这一句打上结束符
        i = 0 ;//把游标重置
        printf("%s",str);//打打印出来,这里就不用加换行符,因为字符串中已经有了.
    }
}
fclose(fp);
2008-12-06 10:30
jxlghy
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2008-11-20
收藏
得分:0 
感谢上面两位兄弟debroa723和ying8501,你们的解决方法都正确。非常感谢!
2008-12-07 09:31
快速回复:请高手们指点指点
数据加载中...
 
   



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

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