type de conflit pour une fonction définie par l’utilisateur en c

Je travaille dans c après un long moment.ici je dois atteindre trois fonctionnalités qui comprend

  1. obtenir un numéro et montrer la moitié

2.Obtenez le carré du nombre

3.Obtenez deux nombres et montrez leur sommation et leur sabtraction.

J’utilise devC ++ et, lorsque je comstack le code, l’erreur que j’ai mentionnée dans le titre indique le conflict type if squareInput . Ce qui ne va pas ici:

 #include #include int main(){ float x; printf("enter a number\n"); scanf("%f",&x); //TASK 1 : display half of the number pirntf("half of x is = %.3f",x); //TASK 2 : square of number squareInput(x); //call square function from here // TASK 3 : get two numbers and display both summation and sabtraction float num1,num2; // declare two floating number( floating numbers can hold decimal point numbers printf("enter num1 \n"); scanf("num1 is =%f",&num1); printf("enter num2 \n"); scanf("num2 is =%f",num2); calculate(num1,num2);// call calculate function getch(); } float squareInput(float input){ float square=input*input; printf("\n square of the number is %.3f \n",square); return 0; } float calculate(float num1,float num2){ //summation float summation= num1+num2; // declare antoher variable called summation to hold the sum //sabtraction float sabtraction=num1-num2; printf("summation is %.2f \n",summation); printf("sabtraction is %.2f \n",sabtraction); return 0; } 

    Les choses iront mal sans prototypes. Ajouter

     float squareInput(float input); float calculate(float num1,float num2); 

    devant int main() .

    Si vous ne déclarez pas une fonction avant qu’elle ne soit appelée, le compilateur l’assume comme une fonction renvoyant int. Cependant, squareInput() renvoie float, de sorte que le compilateur (ou l’éditeur de liens, peut-être) se plaint auprès de vous.

    Notez également que les définitions sont des déclarations (mais pas l’inverse évidemment), il est donc important de déplacer les définitions de squareInput() et de calculate() devant l’endroit où elles sont appelées.

    Au moment où vous appelez squareInput et calculate , ils n’ont pas encore été définis. Donc, C suppose une déclaration implicite de int squareInput() et int calculate() . Ces déclarations implicites sont en conflit avec les définitions de ces fonctions.

    Vous pouvez résoudre ce problème en ajoutant des déclarations pour chacune de ces fonctions avant main :

     float squareInput(float input); float calculate(float num1,float num2); 

    Ou simplement en déplaçant les fonctions dans leur intégralité avant main .

    Assurez-vous d’append des prototypes lorsque vous utilisez une fonction. De cette façon, vous n’avez pas besoin de trop vous soucier de l’ordre dans lequel vous les appelez.

    Essayez également de séparer vos problèmes en plus petits morceaux si vous le pouvez. Un commentaire comme TAKS1 vous indique que vous souhaitez réellement une fonction portant ce nom.

     #include  //prototypes void AskUserForOneNumer(float * number, const char * question ); void TASK_1(float x); void TASK_2(float x); void TASK_3(float a, float b); int main() { float x, a, b; AskUserForOneNumer(&x, "enter x"); AskUserForOneNumer(&a, "enter a"); AskUserForOneNumer(&b, "enter b"); TASK_1(x); TASK_2(x); TASK_3(a, b); } void TASK_1(float x) { printf("x = %g\n", x); printf("0.5 * x = %g\n", 0.5 * x); } void TASK_2(float x) { printf("x = %g\n", x); printf("x * x = %g\n", x * x); } void TASK_3(float a, float b) { printf("a = %g\n", a); printf("b = %g\n", b); printf("a + b = %g\n", a + b); printf("a - b = %g\n", a - b); } void AskUserForOneNumer(float * number, const char * question) { float x; printf("%s\n", question); scanf("%f", &x); printf("your input was %g\n", x); *number = x; }