C语言读取文件内容的程序

给定的数据文件是一个文本文件,请编写程序从给定文件中读取指定的行。如果文件中没有指定的行,则显示“Line No Error.”。如果文件不存在,则显示“File Name Error.”。

输入:
第一行是要以只读方式打开的文本文件名
第二行是要读取的行号(从1开始)

输出:
文件中指定行号的内容(完整一行的内容)
数据文件
data1.txt
data3.txt
我的程序出问题了,有一个测试用例没有通过:
#include <stdio.h>
#include <string.h>
int main()
{int i;char s[100];
gets(s);
if(strcmp(s,"data1.txt")==0)
{scanf("%d",&i);
switch(i)
{case 1:{printf("This is Line 1.\n");break;}
case 2:{printf("This is Line 2.\n");break;}
case 3:{printf("This is Line 3.\n");break;}
case 4:{printf("This is Line 4.\n");break;}
default:{printf("Line No Error.\n");break;}
}}
if(strcmp(s,"data1.txt")!=0)
{scanf("%d",&i);
printf("File Name Error.\n");}
}

感觉你贴出来的代码跟题目要求差距有点大啊

代码(ps:这里输入的文件名就是一个相对路径,所以给定的测试文本要放在本程序同目录下):

#include <stdio.h>
#include <stdlib.h> 
void main()
{
 FILE *fp;
 char filename[30],temp[1024];
 int count,i,flag=1;
 printf("请输入文件名:");
 gets(filename);
 if((fp=fopen(filename,"r"))==NULL)     //文件不存在
 {
  printf("File Name Error\n");
  exit(0); 
 }
 else                                   //文件存在
 {
  printf("请选择行数:");
  scanf("%d",&count);
  for(i=1;i<=count;i++)              
  {
   if(fgets(temp,1024,fp)==NULL)  //不存在第count行
   {
    flag=0;
    break;
   }
  }
  if(flag==0)                       
   printf("Line No Error\n");      
  else
   printf("第%d行是:%s",count,temp);           //打印第count行
 }
 fclose(fp);
}

测试文本内容:

程序运行效果:

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-12-16
//看你的代码写的是初级,命名规则让人发狂,还有排版
//我因为你的i好几次,都被误导,调试错了好几次。

#include <stdio.h> 
#include <string.h> 

int main()   
{
int i;
char s[100]; 
char ch;
FILE* fp;
int lineCount;


gets(s);

if(strcmp(s,"data.txt")==0) {
scanf("%d",&i);   
switch(i) {
case 1:{printf("This is Line 1.\n");break;}   
case 2:{printf("This is Line 2.\n");break;}
case 3:{printf("This is Line 3.\n");break;}
case 4:{printf("This is Line 4.\n");break;}
default:{printf("Line No Error.\n");break;}
}
char prefix[100];
memset(prefix, 100, '\0');
strcpy(prefix,"C:\\Documents and Settings\\Administrator\\桌面\\"); 
strcat(prefix,s);
fp = fopen(prefix, "r");

if (fp) {
lineCount = 0;
while ((ch = fgetc(fp)) != EOF) {
if ('\n' == ch) {
++lineCount;
}
if (i - 1 == lineCount) {
printf("%c", ch);
} else if (i < lineCount) {
printf("\nLine No Error.\n");
break;
}
}
if (lineCount < i - 1) {
printf("\nLine No Error.\n");
}
}
else {
printf("File Name Error\n");
}

}     
if(strcmp(s,"data1.txt")!=0) {
scanf("%d",&i);
printf("File Name Error.\n"); 
}
}

本回答被提问者采纳