Оптимизация времени с C? В простом входном алгоритме чтения - PullRequest
0 голосов
/ 04 апреля 2019

Я читаю файл с заданным форматом, поэтому я в курсе, чего ожидать от файла, однако, когда я пытаюсь распечатать все входные данные, просто чтобы убедиться, что код работает, консольпадает с исключением тайм-аута.У меня есть вложенный цикл, поскольку я считаю, что это самый простой способ обработки формата файла.Но я не знаю, есть ли лучший способ справиться с этим.

Проблема в гиках для кодов.Я заметил, что когда я изменяю использование переменной for в цикле for, код компилируется, но таким образом я не смогу обрабатывать разные форматы файлов.Пока у меня есть константа в цикле for в качестве моего параметра, он работает.Есть идеи, почему это так?

первая строка - это число случаев, каждая первая строка после этого сообщает мне номер узла и количество ссылок, а следующая строка имеет связывающие узлы.

Ожидаемый результат будетбыть 4 и 3, но я еще не сделал это так далеко, я все еще проверяю, могу ли я правильно читать в файле.

#include <stdio.h>
#include <ctype.h>
int nextInt();
int main() {
    int c = getchar() - '0';
    printf("%d\n", c);
    while(c > 0){
        int x, y;
        x = nextInt();
        y = nextInt();
        printf("%d%4d\n", x, y);
        int i, a, b;
        for(i = 0;i<2*y; i++){
            a = nextInt();
            printf("%4d", a);
        }
        printf("\n");
        c--;
    }
    return 0;
}

int nextInt(){
    int c, n;
    int num;
    while(isspace(c=getchar())){;}
    num = c - '0';
    while(!isspace(n = getchar())){
        num = (num * 10) + (n - '0');
    }
    return num;
}

Пример для ввода выглядит примерно так:

2
4 4 
0 2 0 3 1 3 2 3
4 3 
0 2 0 1 0 3

вывод

4
3

1 Ответ

2 голосов
/ 04 апреля 2019

Цикл while в nextInt() не останавливается, когда он читает EOF.Если последняя строка не заканчивается новой строкой, вы попадете в бесконечный цикл, потому что он никогда не найдет разделитель после последнего числа.

int nextInt(){
    int c, n;
    int num;
    while(isspace(c=getchar())){;}
    num = c - '0';
    while(!isspace(n = getchar()) && n != EOF){
        num = (num * 10) + (n - '0');
    }
    return num;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...