1

次のコードに問題があります。

/* 
 * Esercizio 5
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* getProduct(char product[]);
long getNumber(char product[]);

int main(int argc, char** argv) {

    char product1[60] = {0};
    char product2[60] = {0};
    char product3[60] = {0};
    char productInput[60] = {0};

    int flag = 0;
    long cost = 0;

    printf("Product 1: ");
    gets(product1);
    printf("Product 2: ");
    gets(product2);
    printf("Product 3: ");
    gets(product3);

    do {

        printf("Product and quantity: ");
        gets(productInput);
        printf("productInput: %s\n", getProduct(productInput));
        printf("product1: %s\n", getProduct(product1));
        if(getProduct(product1) == getProduct(productInput)){ /* PROBLEM HERE!!! */

            // No matter what i input it always goes here
            printf("Selezionato prodotto 1");
            cost = getNumber(product1) * getNumber(productInput);
            flag = 1;

        } else if(getProduct(product2) == getProduct(productInput)){

            printf("Selezionato prodotto 1");
            cost = getNumber(product2) * getNumber(productInput);
            flag = 1;

        } else if(getProduct(product3) == getProduct(productInput)){

            printf("Selezionato prodotto 1");
            cost = getNumber(product3) * getNumber(productInput);
            flag = 1;

        }

    }  while(!flag);

    printf("Costo totale: %d", cost);

    return (EXIT_SUCCESS);
}

char* getProduct(char product[]){

    char *pointer;
    char str_product[60] = {0};

    strcpy(str_product, product);

    pointer = strtok(str_product, " ");

    return pointer;

}

long getNumber(char product[]){

    char *pointer;
    char str_product[60] = {0};

    strcpy(str_product, product);

    pointer = strtok(str_product, " ");
    pointer = strtok(NULL, " ");

    return strtol(pointer, NULL, 10);

}

はっきりとわかるように、さまざまな値へのポインタを返しますgetProduct(productInput)getProduct(product1)問題は、値が異なっていても、if条件が尊重されていないことです。

4

1 に答える 1

6

演算子によって文字列を比較しようとし==ていますが、期待どおりの動作をしていません。

代わりに、を呼び出してそれらを比較する必要がありますstrcmp()(またはさらに良いことにstrncmp()

if(strmcp(getProduct(product1), getProduct(productInput)) == 0){ 

==文字列の比較が正しく機能しない理由==は、文字列自体ではなく、ポインタ(基本的には文字列が格納されているメモリの場所)を比較するためです。

于 2012-05-27T18:36:18.047 に答える