我在这个编程任务中苦苦挣扎,我在这里的一个班级。我是一名电气工程专业的学生,所以我的编程绝非令人惊叹。我被告知写一个带有12位数的c程序,并将每个12位数的数字提取到一个char数组中。我做了快速数学运算并意识到我们可以获得的最大数字是0xFFF或十进制4095。我发现了一种算法,我认为它可以很好地工作,但出于某种原因,我的代码并没有按照我的想法行事。我将继续尝试对此进行故障排除,但是以我唯一的方式运行它是linux终端窗口,我没有一个很好的调试实用程序来完成该程序。任何帮助将不胜感激。请随意提出一些问题,我会尽力提出问题。我不是一个流利的程序员,所以记住这一点。此外,如果有人能解释整数除法对我来说会有所帮助。我假设像8/10这样的东西会返回0的结果,但我不知道它在我运行程序时是那样工作的。谢谢。
我不能使用这些功能,必须手动操作。
这是我到目前为止所做的。
尝试@解决方案:
//12 bit value into string of decimal chars
//EX: 129 -> a '1' a '2' and a '9'
void main (void) {
#include <stdlib.h>
#include <stdint.h>
#include <stdio.h>
#include <stddef.h>
//Initialize an array with 5 spaces, each space
//holds one character (accounts for largest number 4095)
char OUT[5];
uint8_t length = sizeof(char);
//Isolating each int value happens here
//initialize i to act as a counter to loop through array
uint8_t i=2;
//Initialize an input value to test the code;
uint16_t IN=549;
while (IN/10 > 0)
{
OUT[length-(i+1)] = '0' + (IN%10);
IN=IN/10;
if (IN <= 10)
{
if (IN = 10)
{
OUT[length-(i+1)] ='1';
//fixes infinite loop issue
IN=0;
}
else
{
OUT[length-(i+1)] ='0' + IN;
//fixes infinite loop issue
IN=0;
}
}
//Increment Counter to keep track of char array
i++;
}
//add the new line at the end of the array of chars
OUT[length-1]='\n';
printf("String is -> %s", OUT);
}
几个笔记: 使用IN%10是算法的一部分,该算法以十进制形式隔离最右边的数字。我不得不添加一些&#34;软糖因素&#34;到我的计数器让阵列正确排列并在我的char数组的末尾占用\ n。我放在while循环中的条件语句是捕获一些边缘情况(主要是当IN变为10或更小时)。
答案 0 :(得分:0)
看起来你向后弯腰处理你必须先打印最左边的角色这一事实。如果你只是先生成最右边的字符然后反转它,那么逻辑就会简单得多。
#include <stdlib.h>
#include <stdint.h>
#include <stdio.h>
#include <stddef.h>
#include <string.h>
//12 bit value into string of decimal chars
//EX: 129 -> a '1' a '2' and a '9'
void main (void) {
char OUT[5];
memset(OUT, 0, 5);
int i=0;
int j;
uint16_t IN=549;
// Generate the string in reverse order.
while (IN != 0)
{
OUT[i++] = '0' + (IN%10);
IN/=10;
}
// Reverse the string
for (j = 0; j < i/2; j++) {
char temp = OUT[j];
OUT[j] = OUT[i-1-j];
OUT[i-1-j] = temp;
}
printf("String is -> %s\n", OUT);
}
答案 1 :(得分:0)
这一行是你的问题:
uint8_t length = sizeof(char);
sizeof
函数返回括号之间的类型大小。在这种情况下,它返回1,因为char是1字节变量。然后,当您尝试访问数组的元素时,您会从length-(i+1)
获得负数。
答案 2 :(得分:0)
以下是我使用更复杂方式的最终解决方案,以防万一有人好奇/偶然发现问题。
void main (void) {
#include <stdlib.h>
#include <stdint.h>
#include <stdio.h>
#include <stddef.h>
//Initialize an array with 5 spaces, each space holds one character (accounts for largest number 4095)
char OUT[5];
OUT[0] = '0';
OUT[1] = '0';
OUT[2] = '0';
OUT[3] = '0';
OUT[4] = '0';
uint8_t length =5; //sizeof(char) was giving me an error and thus not used.;
//Isolating each int value happens here
//initialize i to act as a counter to loop through array
uint8_t i=2;
//Initialize an input value to test the code;
uint16_t IN=4012;
//Initialize variable for % operator value
uint16_t mod=0;
while (IN/10 > 0)
{
mod=IN%10;
OUT[length-i] = '0' + mod;
IN=IN/10;
if (IN <= 10)
{
if (IN == 10)
{
OUT[length-(i+2)] ='1';
OUT[length-(i+1)] ='0';
//fixes infinite loop issue
IN=0;
}
else
{
OUT[length-(i+1)] ='0' + IN;
//fixes infinite loop issue
IN=0;
}
}
//Increment Counter to keep track of char array
i++;
}
//add the new line at the end of the array of chars
OUT[length-1]='\n';
printf("String is -> %s", OUT);
}