2016-03-30 3 views
0
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <math.h> 

float tolGap(float Tol[], int size); 
float meanGap(float Nom[], float Imp[], int size); 
void parsePart(char input[], float *pNom, int *pImp, float *pTol, char* pFoV); 
void parseGap(char input[], float *max, float *min); 

int main() 
{ 
    FILE *pIN; 
    int i; 
    int Impact[10]; 
    float Nominal[10], Tolerance[10]; 
    char FoV[10]; 
    char input_str[30]; 
    float max, min, tol; 
    int Num_of_Parts; 
    float curr_max, curr_min, mean; 

    pIN=fopen("testingcode.txt", "r"); 

    for(i=0; i<11; i++) 
    { 
     fgets(input_str,30, pIN); 
     if(input_str[0] == 'p') 
     { 
      parsePart(input_str, &Nominal[i], &Impact[i], &Tolerance[i], &FoV[i]); 
     } 
     else 
     { 
      parseGap(input_str, &min, &max); 
      Num_of_Parts = i; 
      break; 
     } 
    } 

    mean = meanGap(Nominal, Impact, Num_of_Parts); 
    tol = tolGap(Tolerance, Num_of_Parts); 
    curr_max = mean+tol; 
    curr_min = mean - tol; 

    if (fabs(max - curr_max) < 0.00001) //they are equal 
    { 
     printf("The Maximum Gap (%fin) is equal to specified (%fin)\n", max, curr_max); 
    } 

    if ((max - curr_max) > 0.00001) 
    { 
     printf("The Maximum Gap (%fin) is Greater than specified (%fin)\n", max, curr_max); 
    } 
    else 
    { 
     printf("The Maximum Gap (%fin) is within specified (%fin)\n", max, curr_max); 
    } 

    if (fabs(min - curr_min) < 0.00001) //they are equal 
    { 
     printf("The Minimum Gap (%fin) is equal to specified (%fin)\n", min, curr_min); 
    } 

    if ((min - curr_min) > 0.00001) 
    { 
     printf("The Minimum Gap (%fin) is Greater than specified (%fin)\n", min, curr_min); 
    } 
    else 
    { 
     printf("The Minimum Gap (%fin) is Less than specified (%fin)\n", min, curr_min); 
    } 

    return 0; 
} 

float tolGap(float Tol[], int size) 
{ 
    int i; 
    float sum=0; 

    for (i=0; i<size; i++) 
    { 
     sum+=Tol[i]; 
    } 
    printf("Actual Gap Tolerance: %fin\n", sum); 
    return sum; 
} 

float meanGap(float Nom[], float Imp[], int size) 
{ 
    int i; 
    float sum=0; 

    for(i=0; i<size; i++) 
    { 
     sum+= Nom[i]*Imp[i]; 
    } 
    printf("Actual Gap Mean: %fin\n", sum); 
    return sum; 
} 

void parsePart(char input[], float *pNom, int *pImp, float *pTol, char* pFoV) 
{ 
    int i; 
    char *elements[5]; 

    elements[0]=strtok(input, ","); 

    for(i=1;i<5;i++) 
    { 
     elements[i] = strtok(NULL, ","); 
    } 

    *pNom = atof(elements[1]); 
    *pImp = atoi(elements[2]); 
    *pTol = atof(elements[3]); 
    *pFoV = *elements[4]; 

} 

void parseGap(char input[], float *max, float *min) 
{ 
    int i; 
    char *elements[5]; 

    elements[0]=strtok(input, ","); 

    for(i=1;i<5;i++) 
    { 
     elements[i] = strtok(NULL, ","); 
    } 

    *max = atof(elements[1]); 
    *min = atof(elements[2]); 
} 

Мой файл эту информацию, содержащуюся в нем:Выход Кодекса все Нули

PART,2.000,-1,0.050,V 

PART,0.975,-1,0.025,V 

PART,3.000,+1,0.010,F 

GAP,0.000,0.080 

В файле нет пустых строк, я добавил их для ясности. Проблема в том, что ни один мой расчет не выполняется. Все мои выходы достигают 0,000000. Я хочу, чтобы он действительно вычислил его, но не может найти проблему. Любая помощь будет принята с благодарностью!

+1

Вы использовали отладчик? –

+0

моя программа не пришла с одним. Должен ли он иметь или мне нужно скачать его? –

+0

Какие ОС, компилятор и IDE (если есть) вы используете? – kaylum

ответ

0

следующая строка: , если (input_str [0] == 'р') должны быть заменены: , если (input_str [0] == 'Р'), так как в файле данных, то 'часть' является в верхнем регистре, но вы проверяете строчный «p».

+0

к сожалению не изменил мои результаты. Однако хорошо знать, что персонаж, который он ищет, чувствителен к регистру. –

1

Вы передаете массив int s

int Impact[10]; 

... 

mean = meanGap(Nominal, Impact, Num_of_Parts); 

к функции, ожидающий массив float s

float meanGap(float Nom[], float Imp[], int size) 

Вы wriitng вне границ массивов:

int Impact[10]; 
float Nominal[10], Tolerance[10]; 
char FoV[10]; 
... 

for(i=0; i<11; i++) 

должен быть

for(i=0; i<10; i++) 

И как указывал @ user2340048, PART в верхнем регистре, и вы проверяете для p в if(input_str[0] == 'p')

+0

Я думал, что причина держать его в 11 будет так, что он сохранит символ \ 0 в конце массива, а затем может удерживать 10 других чисел в массиве. Я изменил первый массив: float Impact [10], но по-прежнему имеет ту же проблему. –

+0

Я не знаю причину, но есть доступ за пределами (потому что вы не проверяете результат 'fgets', а ваша функция синтаксического анализа выполняется 11 раз) –

Смежные вопросы