Bonjour,

apprenant le C après 2 ans de java, je me retrouve bloqué face à certaines choses que l'on ne peut faire de la même manière.

On me demande quelque chose de très simple: créer un type matériel pour représenter un matériel informatique (avec son numéro de série, sa nature, son année d'achat et son état de fonctionnement) puis créer un stock (donc un tableau) de plusieurs matériaux informatiques.

En faisant une recherche d'un numéro de série, je dois savoir s'il est dans la base de données en retournant son indice ou -1 s'il n'y est pas.

En java, rien de plus simple, j'ai écrit ceci:

Code JAVA : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
class Materiel {
	int numSerie;
	String nature;
	int anneeAchat;
	String etat;
 
	static Materiel dataReceive() throws NumberFormatException, IOException
	{
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		Materiel res = new Materiel();
		System.out.println("Numéro de série?");
		res.numSerie = Integer.parseInt(in.readLine());
		System.out.println("Nature?");
		res.nature = in.readLine();
		System.out.println("Année d'achat?");
		res.anneeAchat = Integer.parseInt(in.readLine());
		System.out.println("état de fonctionnement?");
		res.etat = in.readLine();
		return res;
	}
 
	void dataDisplay()
	{
		System.out.println("Numéro de série:" + this.numSerie);
		System.out.println("Nature:" + this.nature);
		System.out.println("Année d'achat:" + this.anneeAchat);
		System.out.println("Etat de fonctionnement:" + this.etat);
		System.out.println();
	}
}
class Stock {
	Materiel [] tabMat = new Materiel[100];
	int nbMat = 0;
 
	void ajouter(Materiel m)
	{
		this.tabMat[this.nbMat] = m;
		this.nbMat++;
	}
 
	void affichage()
	{
		for (int i = 0; i < nbMat; i++)
		{
			this.tabMat[i].dataDisplay();
		}
	}
 
	boolean disponibilite(int numSerie){
		for (int i = 0; i < nbMat; i++){
			if (tabMat[i].numSerie == numSerie) return true;
		}
		return false;
	}
 
	int getNumSerie() throws NumberFormatException, IOException{
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		System.out.println("Tapez le numéro de série du produit recherché: ");
		int numSerie = Integer.parseInt(in.readLine());
		return numSerie;
	}
 
	void appelDisponibilite(int numSerie){
		if (disponibilite(numSerie)) System.out.println("Le produit est disponible");
		else System.out.println("Le produit est indisponible");
	}
}
public class StockInfo {
	public static void main(String [] args) throws NumberFormatException, IOException
	{
		char reponse = 'n';
		Stock s = new Stock();
		do
		{
			BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
			s.ajouter(Materiel.dataReceive());
			System.out.println("Voulez-vous rentrer un autre produit?");
			reponse = in.readLine().charAt(0);
			System.out.println();
		} while (reponse != 'n');
		s.affichage();
		s.appelDisponibilite(s.getNumSerie());
	}
}

En C, hum hum... j'ai quelques soucis! Ma fonction de recherche du numéro de série ne fonctionne pas (le programme plante) et, second problème, quand je tape, dans la nature du matériel, "carte mère", par exemple, le compilateur enregistre carte pour la "nature" et "mère" pour l'état de fonctionnement, laissant l'année d'achat à 0.

Par contre, si je tape un seul mot, tout fonctionne sauf pour la recherche du numéro de série.

Pourriez-vous m'aider, s'il vous plait?

Je vous donne mon code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <stdio.h>
#include <stdlib.h>
#define NP 100
 
struct materiel {
    int num_serie;
    char nature[40];
    int annee_achat;
    char etat[40];
};
 
void display(struct materiel stock [], int nb_mat){
 
    int i;
    for (i = 0; i < nb_mat; i++){
        printf("Numéro de série: %d\n", stock[i].num_serie);
        printf("Nature du matériel: %s\n", stock[i].nature);
        printf("Année d'achat: %d\n", stock[i].annee_achat);
        printf("Etat de fonctionnement: %s\n", stock[i].etat);
    }
    }
 
void dataReceive(struct materiel stock [], int nb_mat){
    int i;
    for (i=0; i<nb_mat; i++){
        printf("Numéro de série?\n");
        scanf("%d", &stock[i].num_serie);
        printf("Nature du matériel?\n");
        scanf("%s", &stock[i].nature);
        printf("Année d'achat?\n");
        scanf("%d", &stock[i].annee_achat);
        printf("En état de fonctionnement?\n");
        scanf("%s", &stock[i].etat);
        }
}
 
int get_nb_mat(){
    int nb_mat;
    printf("Combien de produits voulez-vous rentrer?\n");
    scanf("%d", &nb_mat);
    return nb_mat;
    }
 
int disponibilite(struct materiel stock [], int num_serie, int nb_mat){
    int i;
    for (i = 0; i < nb_mat; i++){
        if (stock[i].num_serie == num_serie){
            printf("Le numéro de série recherché se trouve à l'indice %d\n", i);
            return i;}
    }
    return -1;
}
 
int get_num_serie(){
    int num_serie;
    printf("Tapez le numéro de série du produit recherché:\n");
    scanf("%d", num_serie);
    return num_serie;
	}
 
int main()
{
    struct materiel stock [NP];
    void display(struct materiel stock [], int nb_mat);
    void dataReceive(stock, nb_mat);
    int disponibilite(stock, num_serie, nb_mat);
    void appel_disponibilite(stock, num_serie, nb_mat);
    int get_nb_mat();
    int nb_mat;
    int num_serie;
 
    nb_mat = get_nb_mat();
    dataReceive(stock, nb_mat);
    display(stock, nb_mat);
 
    num_serie = get_num_serie();
    disponibilite(stock, num_serie, nb_mat);
}
Merci par avance,
Johnny3