c - 如何获取一个字符串,然后将其用作计算?
问题描述
假设他们输入r = (i == 16)
,我怎样才能接受这个然后运行它作为输出?
这是我得到的错误。
G:\Code\Tutorial 3\main.c|104|error: assignment to expression with array type
代码
#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.");
}
解决方案
如果我理解正确,您希望允许用户输入一个包含一段 C 代码的字符串。在您的示例中,输入字符串是r = (i == 16)
.
然后,您想执行用户输入的任何一段 C 代码。如果输入的 C 代码包含任何变量(在您的示例中) r
,i
您希望在程序中使用实际变量的值。
因为 C 是一种编译语言,所以实现起来非常困难(我会说几乎不可能)。您必须编写一个编译器来将输入的 C 代码编译为机器代码。即便如此,要让生成的机器代码访问正在运行的程序中的上下文(例如变量)也是非常困难的。
无意冒犯,但这种锻炼远远超出了你的水平。如果这是来自作业,这不是你的老师希望你做的。
PS 1:如果输入不是一段任意的 C 代码,而只是具有有限运算符集的表达式,则任务会变得更简单。
PS 2:在 Python 等更动态的语言中,这更容易实现(例如,查看 Pythoneval
语句)。如果您可以灵活地选择编程语言,那么使用 Python 之类的语言可能是更好的方法。
推荐阅读
- sql - 在 dba_users 中查找记录而不是在单个用户表中
- r - 将两个 data.table 合并到一个新的 data.table
- java - 更正 Oracle 和 PostgreSQL for Java(Hibernate) 浮点类型中的列类型
- xaml - Xamarin.Forms。优化列表视图
- c++ - GCC6.3.0:标志“--coverage”不起作用(没有生成 gdca 文件)
- angular - Angular 7 多个路由器出口和延迟加载
- javascript - 如何将由 javascript 创建的文件发送到服务器,然后由 django 处理,以便通过电子邮件发送?
- firebase - Firebase iOS SDK 无法访问代理后面的实时数据库
- android - 在 Xamarin Android 中启动一个新的 Activity 而不会中断当前的 Activity?
- python - 打印 pyspark 数据框列中的所有类别