2013-12-03 33 views
0

我需要编写一个程序,读取某个文本文件,并显示每转换成ASCII码第十个符号。但是当它发现字母“ZZ”时需要停止阅读。此外,如果少于10个符号或者没有“ZZ”字母,程序不应打开文本文件。这是我目前的脚本,我不知道如何编写程序停止阅读的部分,直到找到“ZZ”,如果没有字母,它不应该打开文本文件“ZZ ”。程序停止阅读文本时,它发现某个字

#include <stdio.h> 
int main() 
{ 
    FILE* f1; 
    FILE* f2; 
    char fn1[FILENAME_MAX]; 
    char fn2[FILENAME_MAX]; 
    int i, c, c1; 

    printf("Please write the name of your file\n"); 
    gets(fn1); 
    f1 = fopen(fn1,"rt"); 
    for(i = 1;i <= 9;i++) { 
     c = fgetc(f1); 
      if (c == EOF){ 
      perror("Error while opening file\n"); 
      exit`enter code here`; 
     } 
    } 
    while((c = fgetc(f1)) != EOF){ 
    c1++; 
     if (c1 % 10 ==0){ 
     printf("%X ", c); 
     } 
    } 
    fclose(f1); 
    return 0; 
    } 
+0

“程序不应该打开一个文本文件......如果没有‘ZZ’字母”就叫'CrytalBAll(文件名,“ZZ “);'或者再次检查程序要求。 – chux

+0

如果我想打开的文本文件中没有“ZZ”字母* – user2961021

+0

'f2'和'fn2'未使用;他们应该被删除。你甚至不应该在玩具程序中使用'gets()';它已从标准C11中删除,并且已被弃用了很久(这是1988年原始Internet蠕虫中使用的攻击媒介之一(搜索Google for'morris internet worm')),请改用'fgets()',并记住删除尾随的换行符(或者,如果你在Windows上使用''rt''表示' - 这是'fopen()'的非可移植模式 - 则考虑'gets_s()'代替' ()') –

回答

-1

没有办法知道有多少ZZ或符号,而无需打开该文件,并第一次读它,但这里有一段代码,你可以添加到您的脚本,将使程序停止当行包含ZZ (如果ZZ是单独一条线,将只工作):

if(!strcmp(fgets(fn1 , sizeof fn1 , f1) , "ZZ")) 
     exit(1); 
+0

谢谢,这实际上对我有效! – user2961021