4 / 4 / 3
Регистрация: 28.09.2013
Сообщений: 152
1

Прекращение чтения строк при вводе символа EOF

13.08.2014, 01:17. Показов 1278. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задача такая: программа читает строки и прекращает чтение на третей строке включительно или при встрече символа EOF. Перебрал парочку варинтов - все не работали. Это вроде бы должен работать в теории. Код компилируется, но программа зависает после первого ввода.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <string.h>
#define LIM 100
#define LINES 3
 
int main(void)
{
    char ar[LINES][LIM];
    int i, k;
    
    for (i=0; i<LINES; ++i)
    {
        gets(*(ar+i));
        for (k=0; ar[i][k]!='\0', *(ar+i)+k!=NULL; ++k)
            ;
        if (k!=strlen(*(ar+i))+1)
            break;
    }
        
    system("pause");
    
    return 0;
}
С количеством строк проблем нет. Проблемы с EOF. Я знаю, как реализовать прекращение ввода при втрече EOF на одномерном массиве или на переменной, но с двумерным массивом возникли трудности.

Добавлено через 33 минуты
Сделал другой вариант. Не прекращается завершение ввода при вводе EOF (ctrl + Z)
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
#include <string.h>
#define LIM 100
#define LINES 3
 
int main(void)
{
    char ar[LINES][LIM];
    int i, k;
 
    for (i=0; i<LINES; ++i)
    {
        gets(*(ar+i));
        for (k=0; k<strlen(*(ar+i)); ++k)
            if (*(ar+i)+k!=NULL)
                continue;
            else
            {
                break;
                break;
            }
    }
        
    system("pause");
    
    return 0;
}
Добавлено через 34 минуты
Еще один вариант. Тоже не работает. У меня голова кругом уже идет. Жду ваших идей.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <string.h>
#define LIM 100
#define LINES 3
 
int main(void)
{
    char ar[LINES][LIM];
    int i, k;
 
    for (i=0; i<LINES; ++i)
        if (gets(*(ar+i))!=NULL)
            continue;
        else
            break;
        
    system("pause");
    
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.08.2014, 01:17
Ответы с готовыми решениями:

При вводе данных цикл по поиску EOF в Getchar не останавливается
Здраствуйте, вот такая проблема: #include &lt;stdio.h&gt; main() { int nc=0; while(getchar()...

Завершение программы при вводе символа
Задача такая: написать программу, которая переводит температуру по Форенгейту в температуру по...

Сделать перенос строки при вводе определенного символа
Собственно, проблема. Нужно чтобы при вводе определённого количества символов пользователем...

Нужно, чтобы программа с циклом заканчивала свое выполнение при вводе любого символа
Здравствуйте, форумчане. Нужно чтобы программа с циклом заканчивала свое выполнение при вводе...

4
Заблокирован
13.08.2014, 08:18 2
C
1
2
3
4
5
    for (i=0; i<LINES; ++i)
    {
        gets(*(ar+i));
        if (*(ar+i)[0]==NULL) break;
    }
1
Эксперт функциональных языков программированияЭксперт Java
4487 / 2722 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
13.08.2014, 09:45 3
http://en.wikibooks.org/wiki/C... ternatives
1
430 / 384 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
13.08.2014, 12:35 4
Я уменьшил LIM, чтобы продемонстрировать корректную работу даже при вводе строк длиннее, чем LIM-1.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>
#include <string.h>
#define LIM 10
#define LINES 3
 
int chomp(char* s)
{
    s = strchr(s, '\n');
    if( s ) {
        *s = '\0';
        return 1;
    }
    return 0;
}
 
void flush_stdin(void)
{
    int c;
    do {
        c = getchar();
    } while( c != EOF && c != '\n' );
}
 
int main(void)
{
    char ar[LINES][LIM];
    unsigned i;
    for( i = 0; i < LINES; ++i ) {
        if( !fgets(ar[i], LIM, stdin) ) { break; }
        if( !chomp(ar[i]) ) { flush_stdin(); }
    }
    unsigned lines = i;
    for( i = 0; i < lines; ++i ) {
        puts(ar[i]);
    }
    return 0;
}
1
4 / 4 / 3
Регистрация: 28.09.2013
Сообщений: 152
13.08.2014, 14:04  [ТС] 5
Всем спасибо за ответы.
0
13.08.2014, 14:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.08.2014, 14:04
Помогаю со студенческими работами здесь

CLion - Как добиться появления символа EOF
Известные мне сочетания клавиш не работают #include &lt;stdio.h&gt; /*Следующая программа занимается...

Getchar() возвращает EOF сразу после чтения первого символа строки
#include &lt;fstream&gt; #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;vector&gt; #include &lt;conio.h&gt;...

Завершение цикла при вводе EOF
Пишу небольшую программку и в ней имеется вот такой код: typedef...

Составить программу, которая при вводе символа с клавиатуры выво-дит "латинская буква" при вводе латинской буквы и "не латинская бук-ва" во всех остал
Составить программу, которая при вводе символа с клавиатуры выво-дит &quot;латинская буква&quot; при вводе...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru