EOF的使用
经常遇到getchar()!=EOF来作为输入终结的判断条件。但其实对这还是不明白。我们要输入什么才算是EOF,才会退出循环 。请解释明白点。还有,getchar()源码去哪可看到?谢谢。
[解决办法]
Windows下 Ctrl+z
Linux下 Ctrl+d
/****fgetchar.c - get a character from stdin** Copyright (c) 1985-1997, Microsoft Corporation. All rights reserved.**Purpose:* defines _fgetchar() and getchar() - read a character from stdin* defines _fgetwchar() and getwchar() - read a wide character from stdin********************************************************************************/#include <cruntime.h>#include <stdio.h>/****int _fgetchar(), getchar() - read a character from stdin**Purpose:* Reads the next character from stdin. Function version of* getchar() macro.**Entry:* None.**Exit:* Returns character read or EOF if at end-of-file or an error occured,* in which case the appropriate flag is set in the FILE structure.**Exceptions:********************************************************************************/int __cdecl _fgetchar ( void ){ return(getc(stdin));}#undef getcharint __cdecl getchar ( void ){ return _fgetchar();}
[解决办法]
还是给个简单的
distance.txt存储形式
北京 上海 天津 重庆
北京 0 1088 118 1640
上海 1088 0 953 1600
天津 118 953 0 2067
重庆 1640 1600 2067 0
注意字符串之间用一个tab相隔
有问题问我
qq 810097972
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define MAX 5
#define M 4
FILE *fp;
int i;
char city[4][10];
char ch[10];
char buf[100];
char* getName(int num);
int getNum(char *cityName);
void getdata(int** dist);
int ReadLine(FILE *fp);
char filename[23]="distance.txt";//
void main()
{
FILE *fp;
if((fp=fopen(filename,"r"))==NULL)
{
printf("connot open!");
exit(0) ;
}
ReadLine(fp);
/************以下为测试*************/
for(int i=0;i<M;i++) //M为城市个数
printf("%s",getName(i)); //得到字符串 北京上海天津重庆
printf("\n");
printf("北京的编号:%d\n",getNum("北京"));//得到北京编号0
printf("上海的编号:%d\n",getNum("上海"));//得到上海编号1
}
int ReadLine(FILE *fp)
{
for(int i=0;i<M;i++)
{
fscanf(fp,"%s",ch);
strcpy(city[i],ch);
}
intlen = strlen (buf);
for(i=0;i<len;i++)
for(int j=0;i<10;j++)
buf[i]=city[i][j];
if(fp==NULL)
return -1;
}
char* getName(int num)
{
return city[num];
}
int getNum(char *cityName)
{
for(i=0;i<MAX;i++)
if(strcmp(cityName,city[i])==0)
return i;
}