Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C] stampare contenuto di puntatore a struttura

    Buon pomeriggio a tutti,
    ho un problema con questo codice:

    codice:
    char buffer[100];
        struct nodo        //struttura elementi della lista
        {
            char nome[100];
            double dato;
            struct nodo *next;
        } nodo;
        struct *temp;
       Printf("inserire il luogo");
       scanf("%s", buffer);
    if (buffer=="end")
            printf("Non e' stato inserito alcun luogo.");
        else
        {
            while (buffer!="end")
            {
                temp = (struct nodo*)malloc(sizeof(nodo));
                temp->nome==buffer;
                printf("%s\n", temp->nome);
                printf("Inserire il valore di concentrazione:\n");
                scanf("%lf", &temp->dato);
                printf("%lf\n", temp->dato);
    ...
    ...
    ...
    Eseguo la printf per capire cosa esattamente ha inserito nel nodo in quella posizione della struttura ma al momento di stampare a video temp->nome mi da caratteri strani (che credo si riferiscano all'indirizzo di memoria e non tanto il nome che invece serve a me).

    Grazie

  2. #2
    codice:
    if (buffer=="end")
    ...
    while (buffer!="end")
    ...
    non puoi comparare le stringhe in quel modo, devi usare la funzione di libreria strcmp()

    codice:
    ...
    temp->nome==buffer;
    ...
    Questa riga di codice invece cosa dovrebbe fare ?
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  3. #3
    Quote Originariamente inviata da Samuele_70 Visualizza il messaggio
    codice:
    if (buffer=="end")
    ...
    while (buffer!="end")
    ...
    non puoi comparare le stringhe in quel modo, devi usare la funzione di libreria strcmp()
    ok modifico subito, ma quindi c non riesce a fare il controllo direttamente? (in altri linguaggi uso molto queste istruzioni..)

    Quote Originariamente inviata da Samuele_70 Visualizza il messaggio
    codice:
    ...
    temp->nome==buffer;
    ...
    Questa riga di codice invece cosa dovrebbe fare ?
    dovrebbe assegnare la stringa che è in buffer a quel 'campo' del nodo temp.
    Se lascio un solo uguale il compilatore va in errore: incompatible types when assigning to type char[100] from type char*

  4. #4
    NO il linguaggio non supporta le basilari operazioni sulle stringhe (confronto e assegnazione), perché in C le stringhe semplicemente non sono state implementate.
    Per copiare il contenuto di una stringa in un'altra, devi usare la funzione di libreria strcpy()

    codice:
    strcpy( temp->nome, buffer);
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  5. #5
    Quote Originariamente inviata da Samuele_70 Visualizza il messaggio
    NO il linguaggio non supporta le basilari operazioni sulle stringhe (confronto e assegnazione), perché in C le stringhe semplicemente non sono state implementate.
    Per copiare il contenuto di una stringa in un'altra, devi usare la funzione di libreria strcpy()

    codice:
    strcpy( temp->nome, buffer);
    Ok, ti ringrazio.
    Tanto per capire, quando si dice che la stringa è un array di caratteri, è per lo stesso motivo?
    Ancora grazie

    Daniele

  6. #6
    Esattamente, in C le "stringhe" non sono altro che una sequenza di char terminate da uno o (zero) binario, infatti sono chiamate null-terminated string.
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.