回 帖 发 新 帖 刷新版面

主题:各位大侠帮帮忙看看这个课本上的程序有什么问题

这是我C语言课本《A First Book of ANSI C》Fourth Edition 上的一道例题

#include <stdio.h>
#include <stdlib.h>
#define HOLIDAYS 20
int htable[HOLIDAYS];

int main()
{
  int getHolidays();
  int i,numHolidays;

  numHolidays=getHolidays();

  printf("The holiday array contains %d elements.\n",numHolidays);
  printf("And contains the elements:\n");
  for(i=0;i<numHolidays;i++)
    printf("%d\n",htable[i]);

  getch();
  return 0;
 }

int getHolidays()
{
  char HolidayFile[]="d:\Holiday1.txt";
  int i=0;

  int mo,day,yr;
  FILE *inFile;

  inFile=fopen(HolidayFile,"rb+");
  if(inFile==NULL)
  {
    printf("\nFailed to open the file.\n");
    getch();
    exit(1);
   }

  while(fscanf(inFile,"%c/%c/%c",&mo,&day,&yr)!=EOF)
    htable[i++]=yr*10000+mo*100+day;

  fclose(inFile);

  return i;

 }
而d:\Holiday1.txt 上的内容是:
1/1/2007
1/15/2007
2/19/2007
4/6/2007
4/9/2007
5/5/2007
5/21/2007
5/30/2007
7/1/2007
7/4/2007
9/3/2007
10/8/2007
10/8/2007
11/22/2007
11/25/2007
程序的目的是转换成如下的形式输出:
20070101
........
但我试了,却达不到这个目的。
这是为什么???

--I'am a green hand--

回复列表 (共5个回复)

沙发

d:\Holiday1.txt这个路径字符串改成d:\\Holiday1.txt能不能达到目的?
程序有什么显示?编译器提示了什么错误或者warning?

板凳

链接和运行没有出错,运行结果:

3 楼


运行结果:23360
27260
27160
27160
27160
27860
23660
23360
27260
15358
27354
27154
27154
27854
27654
27354
27254
27254
27654
27154
27154
27854

4 楼

fscanf(inFile,"%c/%c/%c",&mo,&day,&yr)
注意这里,你是按%c取出的三个值,应该按%d取才对

5 楼

我改成 fscanf(inFile,"%d/%d/%d",&mo,&day,&yr);但运行后还是达不到显示
20070101
......   的效果啊,显示变成了:16085 16099 16203 ......
为什么会这样的???是数据发生了类型转换吗,怎么改才能达到20070101的效果?
希望大哥指点指点

我来回复

您尚未登录,请登录后再回复。点此登录或注册