Programme en C++ : affichage curieux

riadusse -  
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
voici mon programme de simulation de processus selon la méthode SJF
j ai pas compris pourquoi l affichage est très très bizarre voici mon programme en c++ merci de votre aide d avence
ta=temp d arriver
texe=temp esecution
t[] tableau initiale
aff[]tableau d affichage


#include<stdio.h>
#include<stdlib.h>
typedef struct{int ta;int texe;char nom[5];}processus;
int main()
{
processus t[100];
processus aff[100];
processus x,y;
int n,aux,i,j,z,indmin,s,e;

printf("donner le nembre de processus\n");
scanf("%i",&n);
for(i=0;i<n;i++)
{

printf("donner le nom du processus n\n");
scanf("%s",&t[i].nom);
printf("donner le temp d arriver du processus n\n");
scanf("%i",&t[i].ta);
printf("donner le temp d execution du processus n\n");
scanf("%i",&t[i].texe);
}
/*trie selon temp d arriver*/
for(i=0;i<n-1;i++)

{
indmin=i;
for(j=i+1;j<n;j++)
{
if(t[j].texe<t[indmin].texe)
{
indmin=j;


}
}
x=t[i];
t[i]=t[indmin];
t[indmin]=x;

}

/ma methode sjf*/
z=0;
e=1;
while(e==1)
{
e=0;
for(i=0;i<=n;i++)
{


if((t[i].ta<=s)&&(t[i].ta!=999))
{

aff[z]=t[i];
s=0;
s=s+aff[z].texe;
z++;
t[i].ta=999;
e=1;
}

}
}
for(i=0;i<n;i++)
{
printf("%i\n",&s);
}

system("pause");

}

2 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Salut,
Tu affiches l'adresse mémoire au lieu des valeurs.

for(i=0;i<n;i++)
{
printf("%i\n",s); // faut enlever& devant le s.
} 
0
riadusse
 
mais le probleme si je fais ca ca ne marche pas non plus
for(i=0;i<n;i++)
{
printf("%s",aff[i].nom);//affichage du tableau final
}
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846 > riadusse
 
aff[z]=t[i];
Cette instruction ne permet pas de copier toute la structure. Pour copier une structure, faut copier champ par champ.
Ou tout simplement, tu te sers de la structure t pour afficher le nom.
printf("%s",t[i].nom);//affichage du tableau final

Et enfin pour : scanf("%s",&t[i].nom); //il ne faut pas mettre &.
Ce qui donne : scanf("%s",t[i].nom);

Cdlt
0
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
En fait je pense qu'il faut que tu fasses bien la distinction entre un pointeur (une adresse) et un caractère.

En C une fonction ne peut pas modifier un paramètre (pour être plus exacte, le paramètre manipulé par la fonction est une recopie). Ainsi :
#include <stdio.h>

void f(int x){
  ++x;
}

int main(){
  int x = 69;
  f(x);
  printf("x = %d\n",x); // affiche 69 !
  return 0;
}

Pour s'en sortir il faut passer l'adresse de x (qui sera recopiée, mais qui pointera bien vers x) :
void f(int *x){
  ++(*x);
}

int main(){
  int x = 69;
  f(&x);
  printf("x = %d\n",x); // affiche 70
  return 0;
}

Pour scanf c'est la même chose, c'est pour ca que quand tu veux lire un entier tu écris :
scanf("%d",&x);

Pour une chaîne de caractère s (ie un char * ou un char [ ]), on manipule déjà un pointeur. On a donc pas besoin de prendre l'adresse de s, car c'est déjà une adresse.

Si on revient à ton programme, le champ nom est un pointeur. Donc pas besoin de & pour le scanf.
scanf("%s",t[i].nom); 

Bonne chance
0