2014-12-09 2 views
-2

for цикл в моем коде не работает, как я себе это представлял. Он показывает результаты только с [700] до [999], хотя вся выделенная структура заполнена номерами правильно (я ее проверил). Он также удаляет все, что я напечатал ранее (отсюда printf("check")). Я попытался заменить его на функцию, аналогичную той, которую я использовал ранее, но она тоже не работала. ';' между "%f %f" существует, потому что он разделяет мои переменные в файле, который я читаю. Также u=1000My for loop with fscanf и printf не печатает все

#include "stdafx.h" 
#include "stdio.h" 
#include "stdlib.h" 

struct punkt { 
    float czas; 
    float wartosc; 
}; 

int main() { 
    FILE *pt; 
    pt = fopen("C:\\Users\\Lenovo\\Desktop\\sygnal.csv", "r+"); 
    if (pt == NULL) { 
     printf("error"); 
     getchar(); 
     return 0; 
    } 

    int u = 0; 
    float a, b; 

    while (fscanf(pt, "%f; %f", &a, &b) != EOF) { 
     u++; 
    } 
    rewind(pt); 
    punkt* ptr = (punkt*) malloc(u * sizeof(punkt)); 

    printf("%i", u); 
    printf("check"); 
    getchar(); 

    int x; 
    for (x = 0; x < u; x++) { 
     fscanf(pt, "%f; %f", &ptr[x].czas, &ptr[x].wartosc); 
     printf("%f %f\n", ptr[x].czas, ptr[x].wartosc); 
     printf("%i ", x); 
    } 

    getchar(); 
    free(ptr); 
    fclose(pt); 
    return 0; 
} 
+0

Это ваш код? Он даже не компилируется, если я не переписал структуру как 'typedef struct {...} punkt;' –

+0

Да, это мое. Я забыл добавить библиотеки, которые я использовал. Прости. Я отредактировал его. – Dudu

+0

Это работает без typedef для меня. – Dudu

ответ

0

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

0

Я не совсем уверен, потому что я не скомпилировал и не запустил эту программу самостоятельно но, похоже, ваша проблема исходит из терминала, а не из вашей программы. Скорее всего, ваш терминал имеет только 300 строк текста, поэтому, когда вы пишете 1000 строк в вашем цикле «за», вы выталкиваете все остальное из терминала и только последние 300 строк (700-999, как вы отметили) может подойти. Попробуйте записать свой вывод в новый файл, используя fprintf, и посмотрите, работает ли там выход.

+0

Большое спасибо. Кажется, это правда. Я верю, что ответ на вопрос, как я могу расширить свой терминал, можно найти где-то в Интернете. Я немного удивлен, потому что думаю, что я уже несколько раз печатал более 300 строк, в любом случае спасибо! – Dudu

+0

Я бы с радостью поддержал ваш ответ, но я не могу из-за своей низкой репутации. – Dudu