2015-10-15 3 views
0

Привет, ребята У меня возникла проблема с печатью первых двух букв/символов файла .txt, который содержит -> «нужна помощь». Я бы хотел напечатать первые две буквы -> «ne». Я попытался с ч [], но я не смог исправить, так что я изменил его обратно в той части, которая работает:распечатать первую букву файла в C

int main() { 

    char ch, file_name[2]; 
    int i; 

    FILE *fp; 

    printf("Enter the name of file you wish to see\n"); 
    gets(file_name); 

    fp = fopen(file_name,"r"); 

    if(fp == NULL) 
    { 
     printf("Error while opening the file.\n"); 
     exit(1); 
    } 

    printf("The contents of %s file are :\n", file_name); 


    while((ch = fgetc(fp)) != EOF) 
     printf("%c",ch); 

    fclose(fp); 

    return 0; 
} 
+4

Посмотрите на цикл while. Как вы выходите из него только после двух символов? Подсчитайте их, затем «сломайте». – vsoftco

+0

Просто так много других вещей ... Я имею в виду, что если ваше 'имя_файла' больше 1 символа .... –

+1

Несвязанный, но' char ch, file_name [2]; 'Это действительно то, что вы хотите? – John3136

ответ

-1

Это то, что я придумал до сих пор. Он печатает первые два символа, но затем печатает вопросительные знаки в квадрате под ним. Вот код:

int main() { 

char ch[2], file_name[100]; 
int i; 

FILE *fp; 

printf("Enter the name of file you wish to see\n"); 
gets(file_name); 

fp = fopen(file_name,"r"); 

if(fp == NULL) 
{ 
    printf("Error while opening the file.\n"); 
    exit(1); 
} 

printf("The contents of %s file are :\n", file_name); 

fscanf(fp, "%2s", ch); 
printf("%s\n", ch); 




while((ch[i] = fgetc(fp)) != EOF){ 
    printf("%c",ch); 
} 
fclose(fp); 

return 0; 
} 
+1

' char ch [2] ... fscanf (fp, "% 2s", ch); 'не будет работать. 1) нет места для символа нулевой строки. 2) '% 2s" 'не будет читать пробелы. Еще приятная попытка. – chux

0
int main() { 
char ch[2]; 
FILE *fp; 
fp = fopen("file.txt","r");  
fread(ch,2,1,fp); 
printf("(%c%c) (%2.2s)",ch[0], ch[1],ch); 
} 

стандартный вывод: (п) (п)

+0

Вам не нужен нуль в конце строки с% 2.2s (Если задана точность, нулевой байт должен присутствовать: man 3 printf) , –

0

Я не знаю, почему вам нужна только две первых буквы, но вот как это сделать.

char file_name[256]; 
gets(file_name); 

int lenght = 0; 
strlen(file_name) > 2 ? lenght = 2: lenght = strlen(file_name); 

for(int i = 0; i < lenght; i++) 
    printf("%c", file_name[i]); 

Но совет, который я могу дать вам для строк в C (массивы символов), это попытаться всегда создают больший массив, что вам нужно. Это не стоит много памяти, и всегда безопаснее иметь более чем достаточно. Когда вы вызываете стандартные функции, такие как printf(), они будут проверять символ с нулевым завершением, и это определяет размер вашей строки.