标题:求解,为什么第一轮循环结束后,返回的当前的位置不是0,而是1
取消只看楼主
BCCN_cuser
Rank: 1
等 级:新手上路
帖 子:31
专家分:1
注 册:2016-6-28
结帖率:100%
 问题点数:0 回复次数:2 
求解,为什么第一轮循环结束后,返回的当前的位置不是0,而是1
求解,为什么第一轮循环结束后,返回的当前的位置不是0,而是1

#include<stdio.h>
#include<stdlib.h>
#define CNTL_Z '\032'
#define SLEN 81
int main(void)
{
    char file[SLEN];
    char ch;
    FILE *fp;
    long count ,last;
    puts("Enter the name of the file to be processed:");
    scanf("%80s",file);
    if((fp=fopen(file,"r"))==NULL)
    {
        printf("reverse can't open %s\n",file);
        exit(EXIT_FAILURE);
    }
    fseek(fp,0L,SEEK_END);
    last=ftell(fp);
    for(count=1L;count<=last;count++)
    {
        fseek(fp,-count,SEEK_END);
        ch=getc(fp);
        if(ch!=CNTL_Z&&ch!='\r')
        putchar(ch);
    }
    printf("\n");
    printf("%d\n",ftell(fp));//为什么这里结果不是0,而是1;
    while((ch=getc(fp))!=EOF)
    putc(ch,stdout);
    putchar('\n');
    fclose(fp);
    return 0;
}
搜索更多相关主题的帖子: include Enter count file 
2016-11-24 22:12
BCCN_cuser
Rank: 1
等 级:新手上路
帖 子:31
专家分:1
注 册:2016-6-28
得分:0 
回复 2楼 九转星河
嗯,多谢解惑。
中文倒序的时候确实是会乱码,那如果要输出倒序的中文要怎么处理,同时为什么说中文占两字节。

还有个之前的问题:关于C语言中文件与变量的概念疑惑,是否变量都同等于文件,还是说只有后缀名的才能成为文件(这样至少文件在电脑上是可见的),如何创建新的文件。
2016-11-25 21:35
BCCN_cuser
Rank: 1
等 级:新手上路
帖 子:31
专家分:1
注 册:2016-6-28
得分:0 
回复 4楼 九转星河
我还是不懂第二个问题,像下面这个程序,为什么一个变量(name这个数组)通过将文件的数据流argv[1]赋给它就可以转变为文件了?这样这个文件还是变量吗?如果定义这个变量为自动变量,这个变量转变为文件后是否也是同自动变量具有相同的作用域、存储期、链接。(是的,应该可以通过调试来解决后面的部分疑问。但是我还不懂怎么编写一个项目,搞不懂是不是IDE的问题,这个是另一个问题了,我也在找类似的上机操作来看,但是并没有找到怎么做的,可以的话推荐一本书。谢谢)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LEN 40
int main(int argc,char *argv[])
{
 FILE *in,*out;
 int ch;
 char name[LEN];
 int count=0;
if(argc<2)
{
fprintf(stderr,"Usage: %s filename\n",argv[0]);
exit(EXIT_FAILURE);
 }
 if((in=fopen(argv[1],"r"))==NULL)
 {
fprintf(stderr,"I couldn't open the file \"%s\"\n",argv[1]);
exit(EXIT_FAILURE);
 }
strncpy(name,argv[1],LEN-5);//这就能创造文件?
 name[LEN-5]='\0';
strcat(name,".red");
 if((out=fopen(name,"w"))==NULL)
 {
fprintf(stderr,"Can't creat output file.\n");
exit(3);
 }
 while((ch=getc(in))!=EOF)
 if(count++%3==0)
 putc(ch,out);
 while((ch=getc(out))!=EOF)
 putchar(ch);
if(fclose(in)!=0||fclose(out)!=0)
 fprintf(stderr,"Error in closing files\n");
 return 0;
}


PS:我是想贴在代码里面的,但是贴代码不像之前那样有个小窗口弹出来了,而是下面这样
(这里应该没有文字的)



[此贴子已经被作者于2016-11-27 21:23编辑过]

2016-11-27 20:48



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-471562-1-1.html




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

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