I am having a slight is regarding functions. I believe it is likely because I am not using them. My code is as follows:
/*date difference calculator*/ #include <stdio.h> int main() { int Date1 = 0, Date2 = 0, Dif, F, L, D1, D2, M1, M2, Y1, Y2; int x[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int y[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; char A1, A2, B1, B2; /*input first date*/ fprintf (stderr , "Enter first date,in the form <day>/<month>/<year> or <day>-<month>-<year>.\nWhere <day>,<month> and <year> are integers:\n"); (scanf("%i%c%i%c%i", &D1, &A1, &M1, &B1, &Y1)); /*check first date*/ if (!(Y1 % 4)) x[2]=29; while ((Y1 < 1 || (Y1 > 9999)) || (M1 < 1 || M1 > 12) || (D1 < 1 || D1 > x[M1]) || (A1 != B1) || ((A1 != '/') && (A1 != '-'))) { fprintf (stderr, "Incorrect format, re-enter date:\n"); scanf("%i%c%i%c%i", &D1, &A1, &M1, &B1, &Y1); if (!(Y1 % 4)) x[2]=29; } /*print first date*/ fprintf (stderr, "First date = %i%c%i%c%i\n", D1 , A1 , M1 , B1 , Y1); /*input second date*/ fprintf (stderr , "Enter second date,in the form <day>/<month>/<year> or <day>-<month>-<year>.\nWhere <day>,<month> and <year> are integers:\n"); (scanf("%i%c%i%c%i", &D2, &A2, &M2, &B2, &Y2)); /*check second date*/ if (!(Y2 % 4)) y[2]=29; while ((Y2 < 1 || (Y2 > 9999)) || (M2 < 1 || M2 > 12) || (D2 < 1 || D2 > y[M2]) || (A2 != B2) || ((A2 != '/') && (A2 != '-'))) { fprintf (stderr, "Incorrect format, re-enter date:\n"); scanf("%i%c%i%c%i", &D2, &A2, &M2, &B2, &Y2); if (!(Y2 % 4)) y[2]=29; } /*print second date*/ fprintf (stderr, "Second date = %i%c%i%c%i\n", D2 , A2 , M2 , B2 , Y2); /*convert first date into days*/ for (F = 1; Y1 > F ; F++) { if (F % 4 == 0) (Date1 = Date1 + 366); else (Date1 = Date1 + 365); } for (L = 1; M1 > L ; L++) Date1 = Date1 + x[L]; Date1 = Date1 + D1; /*convert second date into days*/ for (F = 1; Y2 > F ; F++) { if (F % 4 == 0) (Date2 = Date2 + 366); else (Date2 = Date2 + 365); } for (L = 1; M2 > L ; L++) Date2 = Date2 + y[L]; Date2 = Date2 + D2; /*standard output*/ Dif = Date2 - Date1; printf("\n%i\n\n" , Dif); /*text output*/ if (Date2 > Date1) {Dif = Date2 - Date1; fprintf (stderr , "Indicating that the first date is %i days before second date.\n" , Dif);} if (Date1 > Date2) {Dif = Date1 - Date2; fprintf (stderr , "Indicating that the second date is %i days before first date.\n" , Dif);} if (Date1 == Date2) fprintf (stderr , "Indicating that the first date is equal to second date.\n"); }
When compiling using this: gcc -Wall -ansi date1.c -o date1
This occurs:
date1.c: In function ‘main’: date1.c:70:1: warning: control reaches end of non-void function [-Wreturn-type]
Is there a simple fix for this or do I have to write my program to use functions propely? I am unable to change how I compile the code as it has to follow a set spec.
Apologies for the poor formatting of my question but this is my first time here and I was hoping to be able to do it alone.
Hope someone can help!
Warns when a function uses the default int return type or when a return statement is used in a void function.
"Control reaches end of non-void function" means your function has a path through it where the function ends without actually returning data of the type declared in the function declaration. In this case, your shift() function is declared to return an int.
If control reaches the closing curly brace ( } ) of a non- void function without evaluating a return statement, using the return value of the function call is undefined behavior.
You just need to return
from the main function at some point. The error message says that the function is defined to return a value but you are not returning anything.
/* .... */ if (Date1 == Date2) fprintf (stderr , "Indicating that the first date is equal to second date.\n"); return 0; }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With