Programme en C++ : affichage curieux
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");
}
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");
}
A voir également:
- Programme en C++ : affichage curieux
- Programme demarrage windows - Guide
- Mettre en veille un programme - Guide
- Message programmé iphone - Guide
- Programme word gratuit - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
2 réponses
Salut,
Tu affiches l'adresse mémoire au lieu des valeurs.
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. }
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 :
Pour s'en sortir il faut passer l'adresse de x (qui sera recopiée, mais qui pointera bien vers x) :
Pour scanf c'est la même chose, c'est pour ca que quand tu veux lire un entier tu écris :
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.
Bonne chance
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
for(i=0;i<n;i++)
{
printf("%s",aff[i].nom);//affichage du tableau final
}
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