0
votes

Comment puis-je prendre une chaîne, puis l'utiliser comme calcul?

permet de dire qu'ils entrent r = (i == 16) code>, comment puis-je prendre cela puis exécuter cela pour la sortie?

C'est l'erreur que je reçois. P >

g: \ code \ didacticiel 3 \ main.c | 104 | Erreur: affectation à l'expression avec type de tableau code> p>


p>

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

int main()
{
    int answer;
    char operation[20];
    int i = 16;
    int j = 32;
    int k = 8;
    bool r;
    printf("Input an operation:\n");
    fgets(operation, sizeof(operation), stdin);
    operation = answer;
    if (answer == 1)
        printf("The operation you entered was true.");
    else
        printf("The operation you entered was false.");
}


8 commentaires

Opération = Réponse; Qu'attendez-vous que cela fallait?


J'espérais que cela dirigerait l'opération qu'ils ont saisie et définiraient ensuite la sortie comme "réponse"


Même si cela fonctionnait (bien sûr que cela ne signifie pas), vous devez au moins échanger les opérandes. Vous attribuez une réponse à une opération, qui ne fait pas de sens logique.


Mais vous venez de saisir une chaîne à opération , tellement essayant de l'écraser avec n'importe quoi n'a aucun sens.


@Lewisroberts logiquement, ne devrait-il pas être réponse = opération; (en pseudo code). Pas que cela fonctionnera dans le code C réel.


Ah oui, point équitable, même ainsi, comment puis-je ensuite prendre l'opération et l'utiliser? Comment puis-je le prendre afin que ce ne soit plus une chaîne, mais le code?


Qu'entendez-vous par opération ?


@Lewisroberts = ne "exécuter" pas ". Il attribue juste une chose à une autre. La gauche est une chaîne (en fait d'un tableau de caractères) et de droite est une variable int. Il essaie donc d'attribuer la valeur d'une variable INT à un tableau de caractères. C'est tout ce qu'il fait. Pas de magie.


4 Réponses :


2
votes

Réponse courte: vous ne pouvez pas. C est une langue compilée et contrairement aux langues interprétées, il ne peut pas évaluer les chaînes définies de manière dynamique en tant que commandes.

Ce que vous pouvez faire est de créer un sous-ensemble d'opérations autorisées et de les évaluer manuellement. Quelque chose comme ça: xxx


1 commentaires

Ah Ok, merci de toute façon je vais le changer.



4
votes

Si je vous comprends correctement, vous souhaitez autoriser l'utilisateur à entrer une chaîne contenant une pièce de code C. Dans votre exemple, la chaîne d'entrée est r = (i == 16) .

Ensuite, vous souhaitez exécuter tout élément de code C entré par l'utilisateur. Si le code C entré contient des variables ( r et i dans votre exemple), vous souhaitez utiliser les valeurs des variables réelles de votre programme.

Parce que c est une langue compilée, cela est extrêmement difficile (je dirais presque impossible) à atteindre. Vous devriez écrire un compilateur pour compiler le code C entré au code de la machine. Et même alors, il serait extrêmement difficile de donner à l'accès au code de la machine généré au contexte (par exemple les variables) dans votre programme d'exécution.

Aucune infraction prévue, mais ce type d'exercice va bien au-delà du niveau que vous êtes. Si cela vient d'une mission, ce n'est pas ce que votre professeur veut que vous fassiez.

PS 1: Si l'entrée n'est pas une pièce arbitraire de code C, mais juste une expression avec un ensemble limité d'opérateurs, la tâche devient plus simple.

PS 2: Dans des langages plus dynamiques telles que Python, cela est beaucoup plus facile à atteindre (regarder, par exemple, à la déclaration Python Eval ). Si vous avez une flexibilité dans le choix de votre langage de programmation, en utilisant quelque chose comme Python pourrait être une meilleure approche.


0 commentaires

0
votes

Comme les autres utilisateurs ont dit, vous pouvez programmer une opération précédemment acceptée. Et puis, si vous souhaitez exécuter des commandes spéciales, vous pouvez utiliser la famille Famille à l'intérieur des enfants créés avec Fourche .


0 commentaires

0
votes

avec cette expression opération = réponse; Vous essayez d'attribuer une valeur (non initialisée) int sur un pointeur sur un tableau tableau .

Bien que cette expression soit complètement invalide à elle seule, notez que vous devez toujours initialiser les variables avant de les utiliser de quelque manière que ce soit. Sinon, ils n'ont qu'une valeur "Garbarge" aléatoire, que vous utilisez plus tard dans le programme et que vous pouvez causer beaucoup plus d'erreurs.

C'est ce qui provoque le message d'erreur que vous dirigez.

À côté de cela, votre programme a beaucoup plus de problèmes à préoccupation.

Qu'est-ce que vous voulez faire en réalité avec ce programme?

Quel est le but de réponse ? Pourquoi réponse ne reçoit pas une valeur attributée à?

Et pourquoi voulez-vous attribuer une certaine valeur de réponse sur le tableau?

En outre, xxx

est également fou, car réponse ne reçoit pas une valeur avant, alors vous ne pouvez pas faire de condition avec elle.


0 commentaires