Click here to Skip to main content
15,889,403 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
Mi scuso se non sono stato chiaro ho un problema a livello universitario, il programma viene compilato e quando apro il terminale per eseguire il programma non mi stampa l'utlima printf , mentre se lo inserisco su un compilatore online me lo stampa.

incollo qui il mio programma grazie mille.


Translation:

The program does not print me printf

I apologize if I have not been clear I have a problem at the university level, the program is compiled and when I open the terminal to run the program I do not print the latest printf , while if I enter it on an online compiler I print it.

I paste here my program thank you very much.


C++
#include<stdio.h>
#include<stdlib.h>

int massimo(int * sequenza, int lunghezza) ;
int * allocaMemoria();
/*FUNZIONE MAIN*/

int main (){
  char c ; // variabile per controllare se si vogliono inserire altri valori
  int dim =2; // rappresenta la dimensione della memoria alloccata rispetto al puntstoter
  int*sequenza=allocaMemoria(); // dichiaro il mio putantotre e invoco la funzione per allocare la memoria
  int numInseriti=0; // rappresenta il numero di interi inseriti
  int max=0;

  while (c!='n' && c!= 'N'){
    numInseriti++; // incremento la varibilie perche sicuramente vvvera inserito almeno un valore
    if(numInseriti== dim){ // controllo se i numeri inseriti sono uguali alla dimesnione in tal caso aumento la dim dell'area d memeroria
      dim= dim*2;
      sequenza= (int*) realloc(sequenza,dim);
    }

    printf("\nInserisci numero:\n"); // messaggio  video
    scanf("%d%*c",sequenza); // assegno vaslore all'area di memoria

    printf("\nVuoi inserire altri valori (y/n):\n"); // messaggio a video
    scanf("%c",&c);

  }

  printf("Il vvalore max è %d\n",massimo(sequenza,dim) ); /*PRINTF CHE NON VIENE STAMPATA*/
}

//alloca memoria per un intero e restituisce l'indirizzo dell'area di memoria allocata.
int * allocaMemoria(){

 int*puntatore= (int*) malloc(2*sizeof(int)); // utilizzo la funzione malloc per allocare un are di memroia

  return puntatore; //restituisco il puntatore che punta all'indirzzo di memoria creato
}

// funzione calcola e restituisce il massimo in una sequenza di interi.
int massimo(int * sequenza, int lunghezza) {

   int max = sequenza[0];
  for(int i =1;sequenza[i]<lunghezza;i++ ){
="" if(sequenza[i]="">max){
      max=sequenza[i];
    }
  }
  return max;
}


What I have tried:

Come gia scritto ho provato a utilizzare un compilatore online e il programma è stato compilato e eseguito senza problemi

Translation:
As already written I tried to use an online compiler and the program was compiled and run without problems
Posted
Updated 11-Jun-22 11:00am
v2
Comments
KarstenK 12-Jun-22 3:59am    
ich könnte Dir helfen, wenn Du in Englisch geschrieben hättest ...

I have no idea why the last line doesn't print out on your system (it prints out on mine), however your program has (at least) a couple of flaws.
This line
Quote:
sequenza= (int*) realloc(sequenza,dim);
Should be, instead
C
sequenza= (int*) realloc(sequenza, dim * sizeof (*sequenza));


This line
Quote:
scanf("%d%*c",sequenza); // assegno vaslore all'area di memoria
Should be, instead
C
scanf("%d%*c",sequenza+numInseriti-1); // assegno valore all'area di memoria
 
Share this answer
 
Comments
Greg Utas 11-Jun-22 17:29pm    
That was fast!
Compiling does not mean your code is right! :laugh:
Think of the development process as writing an email: compiling successfully means that you wrote the email in the right language - English, rather than German for example - not that the email contained the message you wanted to send.

So now you enter the second stage of development (in reality it's the fourth or fifth, but you'll come to the earlier stages later): Testing and Debugging.

Start by looking at what it does do, and how that differs from what you wanted. This is important, because it give you information as to why it's doing it. For example, if a program is intended to let the user enter a number and it doubles it and prints the answer, then if the input / output was like this:
Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16
Then it's fairly obvious that the problem is with the bit which doubles it - it's not adding itself to itself, or multiplying it by 2, it's multiplying it by itself and returning the square of the input.
So with that, you can look at the code and it's obvious that it's somewhere here:
C#
int Double(int value)
   {
   return value * value;
   }

Once you have an idea what might be going wrong, start using the debugger to find out why. Put a breakpoint on the first line of the method, and run your app. When it reaches the breakpoint, the debugger will stop, and hand control over to you. You can now run your code line-by-line (called "single stepping") and look at (or even change) variable contents as necessary (heck, you can even change the code and try again if you need to).
Think about what each line in the code should do before you execute it, and compare that to what it actually did when you use the "Step over" button to execute each line in turn. Did it do what you expect? If so, move on to the next line.
If not, why not? How does it differ?
Hopefully, that should help you locate which part of that code has a problem, and what the problem is.
This is a skill, and it's one which is well worth developing as it helps you in the real world as well as in development. And like all skills, it only improves by use!
 
Share this answer
 
@CPallini

Forse puoi aiutare questo signore. :)
 
Share this answer
 
Comments
CPallini 11-Jun-22 17:01pm    
Done.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900