Note that there are some explanatory texts on larger screens.

plurals
  1. POArray changing first value without explicitly modifying it when calling fscanf
    primarykey
    data
    text
    <p>I am reading a value from std in and storing it in an array <code>min[3]</code> and later on proceed to make an array comparison. So<code>min</code> is never touched before the comparison.</p> <p>After debugging, I noticed that <code>min[0]</code> changes from the input value to <code>\0</code> upon the executon of this line:</p> <pre><code>fscanf(locDayFile, "%s", extractedHour); </code></pre> <p>where <code>locDayFile</code> and <code>extractedHour</code> are declared as such:</p> <pre><code>FILE* locDayFile; char extractedHour[3]; </code></pre> <p>Any ideas on what is going wrong ?</p> <p><em>EDIT</em> Here I am posting the code:</p> <pre><code>#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;dirent.h&gt; #include &lt;string.h&gt; #include &lt;math.h&gt; struct coords{ float coord[3]; char station[5]; struct coords *next; }; void Add(struct coords**,char*, float*); float* Get(struct coords*, char*); int main(){ DIR *rootFolder, *subFolder; struct dirent *rootEnt, *subEnt; char rootFolderName[260], subFolderName[260]; FILE *locDayFile, *headers, *coordFile; FILE *stationDay, *yearDay, *time, *reference; char locDayFileName[260], headersFileName[260], coordFileName[260]; char stationDayName[260], yearDayName[260], timeName[260], referenceName[260]; char result[260]; char make[260]; char readLine[256]; char searchingFolderName[9], folderCmp[9]; char location[7], year[5], day[4], hour[3], min[3], referenceStation[5]; char locationTest[7], dayTest[4]; char extractedStation[5], extractedYear[5], extratedDay[4], extractedHour[3], extractedMin[3]; char rms[7]; float delay, refereDelay = 0; float *coordinates; char choice; printf("Please enter the following information:\n"); printf("Location: "); scanf("%s", location); memmove(location+1, location, 4); location[0] = 'o'; location[5] = 'a'; location[6] = '\0'; printf("Year: "); scanf("%s", year); printf("Day: "); scanf("%s", day); sprintf(searchingFolderName, "%s_%s", year, day); hour[0] = '\0'; min[0] = '\0'; referenceStation[0] = '\0'; referenceName[0] = '\0'; printf("Do you wish to enter the time?(Y/N): "); do{ scanf("%c", &amp;choice); }while(choice != 'Y' &amp;&amp; choice != 'y' &amp;&amp; choice != 'N' &amp;&amp; choice != 'n'); if(choice == 'Y' || choice == 'y'){ printf("Hour: "); scanf("%s", hour); printf("Minutes: "); scanf("%s", min); } printf("Do you wish to enter a reference station?(Y/N): "); do{ scanf("%c", &amp;choice); }while(choice != 'Y' &amp;&amp; choice != 'y' &amp;&amp; choice != 'N' &amp;&amp; choice != 'n'); if(choice == 'Y' || choice == 'y'){ printf("Reference station: "); scanf("%s", referenceStation); } printf("Root folder path: "); scanf("%s", rootFolderName); struct coords *c; c = NULL; printf("Coordinates file path: "); scanf("%s", coordFileName); coordFile = fopen(coordFileName, "r"); if(coordFile != NULL){ char st[5]; float coords[3]; while(!feof(coordFile)){ fscanf(coordFile, "%s", st); fscanf(coordFile, "%f", &amp;coords[0]); fscanf(coordFile, "%f", &amp;coords[1]); fscanf(coordFile, "%f", &amp;coords[2]); Add(&amp;c, st, coords); } } if((rootFolder = opendir(rootFolderName)) != NULL){ while((rootEnt = readdir(rootFolder)) != NULL){ sprintf(result, "%sresults/", rootFolderName); sprintf(make, "mkdir -p %s", result); system(make); folderCmp[0] = '\0'; strncpy(folderCmp, rootEnt-&gt;d_name, 8); folderCmp[8] = '\0'; if(strcmp(folderCmp, searchingFolderName) == 0){ sprintf(subFolderName, "%s%s/", rootFolderName, rootEnt-&gt;d_name); if((subFolder = opendir(subFolderName)) != NULL){ while((subEnt = readdir(subFolder)) != NULL){ strncpy(locationTest, subEnt-&gt;d_name, 6); locationTest[6] = '\0'; strncpy(dayTest, (subEnt-&gt;d_name)+7, 3); dayTest[3] = '\0'; if((strcmp(location, locationTest) == 0) &amp;&amp; (strcmp(day, dayTest) == 0)){ sprintf(locDayFileName, "%s%s", subFolderName, subEnt-&gt;d_name); locDayFile = fopen(locDayFileName, "r"); while(!feof(locDayFile)){ char garbage[25]; fscanf(locDayFile, "%s", garbage); if(strcmp(garbage, "ATM_ZEN") == 0){ sprintf(headersFileName, "%sheaders_%s-%s", rootFolderName, year, day); headers = fopen(headersFileName, "a+"); fscanf(locDayFile, "%s", garbage); fscanf(locDayFile, "%s", extractedStation);//3rd column. fprintf(headers, "%s\t", extractedStation); fscanf(locDayFile, "%s", garbage); fscanf(locDayFile, "%s", extractedYear);//5th column. fprintf(headers, "%s\t", extractedYear); fscanf(locDayFile, "%s", garbage); fscanf(locDayFile, "%s", extratedDay);//7th column. fprintf(headers, "%s\t", extratedDay); fscanf(locDayFile, "%s", extractedHour);//8th column. fprintf(headers, "%s\t", extractedHour); fscanf(locDayFile, "%s", extractedMin);//9th column. fprintf(headers, "%s\t", extractedMin); fscanf(locDayFile, "%s", garbage); fscanf(locDayFile, "%s", garbage); fscanf(locDayFile, "%f", &amp;delay);//12th column. fscanf(locDayFile, "%s", rms);//13 column. fprintf(headers, "%s\t", rms); fprintf(headers, "%f\n", delay); if(strcmp(referenceStation, extractedStation) == 0 &amp;&amp; refereDelay == 0) refereDelay = delay; coordinates = Get(c, extractedStation); if(coordinates != NULL){ //station_day file sprintf(stationDayName, "%s%s_%s", result, extractedStation, extratedDay); stationDay = fopen(stationDayName, "a+"); fprintf(stationDay, "%s\t", extractedYear); fprintf(stationDay, "%s\t", extractedHour); fprintf(stationDay, "%s\t", extractedMin); fprintf(stationDay, "%f\t", coordinates[0]); fprintf(stationDay, "%f\t", coordinates[1]); fprintf(stationDay, "%f\t", coordinates[2]); fprintf(stationDay, "%s\t", rms); fprintf(stationDay, "%f\n", delay); fclose(stationDay); //year_day file sprintf(yearDayName, "%s%s_%s", result, extractedYear, extratedDay); yearDay = fopen(yearDayName, "a+"); fprintf(yearDay, "%s\t", extractedStation); fprintf(yearDay, "%s\t", extractedHour); fprintf(yearDay, "%s\t", extractedMin); fprintf(yearDay, "%f\t", coordinates[0]); fprintf(yearDay, "%f\t", coordinates[1]); fprintf(yearDay, "%f\t", coordinates[2]); fprintf(yearDay, "%s\t", rms); fprintf(yearDay, "%f\n", delay); fclose(yearDay); //year_day_hour_min file if((hour[0] != '\0' &amp;&amp; (strcmp(hour, extractedHour) == 0)) &amp;&amp; (min[0] != '\0' &amp;&amp; (strcmp(min, extractedMin) == 0))){ sprintf(timeName , "%s_%s_%s", yearDayName, hour, min); time = fopen(timeName, "a+"); fprintf(time, "%s\t", extractedStation); fprintf(time, "%f\t", coordinates[0]); fprintf(time, "%f\t", coordinates[1]); fprintf(time, "%f\t", coordinates[2]); fprintf(time, "%s\t", rms); fprintf(time, "%f\n", delay); fclose(yearDay); } [.....] </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload