【发布时间】:2014-12-19 12:25:55
【问题描述】:
这是我的示例代码:
char a;
char str [20];
unsigned char b[8] ;
unsigned char c[8];
int argsread;
int i;
init_8051();
while(1)
{
printf("\n enter a 64 bit operation \n");
argsread = scanf("%s", str);
sscanf(str, "0x%x%c0x%x", b, &a, c);
printf("\n %d arguments read \n",argsread);
for(i=0;i<8;i++)
{
printf("\n %#x %c %#x\n",b[i],a,c[i]);
}
}
}
这里的问题是,例如,当我在终端中输入以下输入时: 0x1234567890abcdef+0x1234567890abcdef
这会导致一个错误,其中 char 数组的输出完全错误,并且大多数数字都被追踪到 a 中,这应该是加号,我做的事情根本上是错误的吗?
更新: 我将代码更改为以下内容:
while(1)
{
printf("\n enter a 64 bit operation \n");
argsread = scanf("%s", str);
sscanf(str, "0x%s%c0x%s", b, &a, c);
printf("\n %d arguments read \n",argsread);
printf("\n %s \n",b);
}
我将 str 的大小增加到 30 问题是程序的输出是:
1 arguments read
abcdef+0xabcdef
所以 b 的值而不是 abcdef 它是整个字符串!!
更新 2: 发现这个代码完美,但我想使用 scanf 而不是 cin 这里是代码
:`#include <iostream>
using namespace std;
int main()
{
float a, b, result;
char oper, clear;
cout << "Please enter an equation: i.e 5+5 " << endl;
for (;;) {
cin >> a;
cin >> oper;
cin >> b;
if (oper == '+')
result = a + b;
else if (oper == '-')
result = a - b;
else if (oper == '*')
result = a * b;
else if (oper == '/')
result = a / b;
cout << "= " << result << endl << endl;
cin.clear();
cin.ignore();
}
} `
【问题讨论】:
-
你的代码真的是这样格式化的还是你“没有时间”为我们格式化?
-
我只写了大约 10 分钟,因为我想弄清楚怎么做,我不会先格式化,但我会为你做 :)
-
只是一个友好的建议 - 尝试从一开始就编写格式化的代码,而不是稍后重新格式化。这样可以节省时间并更容易发现错误/错误。
-
当然,我确实格式化了一点可读性,谢谢
-
0x1234567890abcdef+0x1234567890abcdef超过 20 个charss。所以这个argsread = scanf("%s", str);溢出了str。