Hi, I'm a beginner at programming and I'm not sure how to read in information from a text file. What I want to do is take a text file which contains around 20 rows and 3 columns of numbers, and put these into an array which can then be used for performing calculations. How do I do this? Would I need to declare the size of the array beforehand? When accessing my file, do I include the full address?

Thanks in advance for your help.

The relevant part is lines 29-33:

Code:#include <stdio.h> #include <stdlib.h> #include <math.h> /* this is a simpllified code using BEM equations */ main() { int i; // counter for referring to rows of array int Nb = 3; // number of blades float pi=3.141592654; // pi float R=1; // radius of turbine (m) float tsr=7; // tip speed ratio float dimRi=0.5; // dimensionless radius along the blade float rho=1.225; // density of air (kg/m^3) float U=10; // free stream velocity of wind (m/s) float maxchord=0.25; // maximum allowed chord length (m) float aguess = 0; // initial guess for axial induction factor float aprimeguess = 0; // initial guess for tangential induction factor float diff1 = 1; // variable showing difference between axial induction factor and current guess float diff2 = 1; // variable showing difference between tangential induction factor and current guess float delta_r = 0.01; // this is the width of one blade element (m) float opt_deltaQ = 0; // optimum values of deltaQ float alpha_deg, alpha_rad, Cl, Cd, Vr, chord, idealchord, phi, beta_rad, beta_deg, PTLfactor, a, aprime, solidity, deltaQ, omega, opt_alpharad, opt_phi, opt_chord; float array[19][3]; // this declares an array FILE*fp; fp=fopen("c:\\flat plate test.txt", "r" ); /*for ( i = 0; i < 19; i++ ) // this inputs flat plate approximations for lift and drag into the array { array[i][0] = 5*i; //alpha array[i][1] = 2*sin(5*i*pi/180)*cos(5*i*pi/180); //Cl array[i][2] = 2*sin(5*i*pi/180)*sin(5*i*pi/180); //Cd } */ for (i=0; i<19; i++ ) // this runs through each set of values for alpha, Cl and Cd { alpha_deg = array[i][0]; // angle of attack, alpha, in degrees alpha_rad=alpha_deg*pi/180; // angle of attack, alpha, in radians Cl = array[i][1]; // coefficient of lift Cd = array[i][2]; // coefficient of drag while(diff1 > 0.0001 || diff2 >0.0001) // this runs the loop until the values for a and aprime have converged { omega=tsr*U*(1-aguess)/R; // angular velocity of blade (rad/s) phi = atan((U*(1-aguess))/(omega*dimRi*R*(1+aprimeguess))); // incoming flow angle (rad) Vr = (U*(1-aguess))/sin(phi); // resultant wind velocity (m/s) idealchord = (16*pi*U)/(9*Nb*Cl*tsr*dimRi*Vr); // optimum chord length (m/s) if(idealchord < maxchord) chord = idealchord; // this limits the chord length if it exceeds the maximum else chord = maxchord; // allowed length defined by the variable maxchord solidity = chord*Nb/(2*pi*dimRi*R); // solidity is ratio of blade area to swept area PTLfactor = (2/pi)*acos(exp((Nb*(dimRi - 1))/(2*dimRi*sin(phi)))); // Prandtl tip loss corrector factor a = 1/((4*PTLfactor*sin(phi)*sin(phi))/(solidity*(Cl*cos(phi) + Cd*sin(phi))) + 1); // axial induction factor aprime = 1/((4*PTLfactor*sin(phi)*cos(phi))/(solidity*(Cl*sin(phi) - Cd*cos(phi))) - 1); // tangential induction factor diff1 = fabs(aguess -a); // returns absolute difference between aguess and a diff2 = fabs(aprimeguess - aprime); // returns absolute difference between aprimeguess and aprime /*printf("ag= %1.4f a= %1.4f apg= %1.4f ap= %1.4f Vr= %3.3f ch= %1.3f phi= %1.4f \n", aguess, a, aprimeguess, aprime, Vr, chord, phi); */ //prints variables aguess = a; // redefines aguess for next iteration aprimeguess =aprime; // redefines aprimeguess for next iteration } deltaQ = 0.5*rho*U*(1-a)*omega*dimRi*dimRi*R*R*(1+aprime)*Nb*(Cl*sin(phi)-Cd*cos(phi))*chord*delta_r/(sin(phi)*cos(phi)); // torque produced by element if(deltaQ > opt_deltaQ) // this loop records the current variable values if they produce a higher deltaQ than any previous angle of attack { opt_deltaQ = deltaQ; opt_alpharad = alpha_rad; opt_phi = phi; opt_chord = chord; } } beta_rad= opt_phi - opt_alpharad; // setting angle beta, in radians beta_deg= beta_rad*180/pi; // setting angle beta, in degrees printf("\n\noptimum deltaQ = %3.2f for beta = %2.2f deg, alpha = %2.1f deg, \nchord = %1.2f m at R = %1.1f m \n", opt_deltaQ, beta_deg, opt_alpharad*180/pi, opt_chord, dimRi*R); }