저는이 강의 중 하나에 대해이 프로그래밍 할당에 어려움을 겪고 있습니다. 나는 전기 공학 학생이기 때문에 프로그래밍이 결코 놀라운 것은 아닙니다. 나는 12 비트 숫자를 취하고 그 12 비트 숫자의 각각을 char 배열로 추출하는 c 프로그램을 작성해야한다. 나는 빠른 수학을했고 우리가 얻을 수있는 가장 큰 숫자는 십진수로 0xFFF 또는 4095라는 것을 깨달았다. 나는 꽤 잘 작동한다고 생각하는 알고리즘을 발견했지만, 어떤 이유로 내 코드는 내가 생각한대로하지 못하고있다. 이 문제를 해결하기 위해 계속 노력하고 있지만 Linux 터미널 창을 실행하는 유일한 방법은 프로그램을 단계별로 실행할 수있는 훌륭한 디버깅 유틸리티가 없습니다. 어떤 도움이라도 대단히 감사하겠습니다. 조금이라도 질문 할 수 있으면 최대한 열심히 노력해야합니다. 저는 유창한 프로그래머가 아니므로 염두에 두십시오. 또한 누군가가 정수 나누기를 설명 할 수 있다면 도움이 될 것입니다. 나는 8/10과 같은 어떤 것이 0의 결과를 리턴 할 것이라는 가정하에 있었지만 프로그램을 실행할 때 그 방법으로 작동하는지 모른다. 고맙습니다.C에서 문자열에 4 자리 정수 (십진수)를 수동으로 추출합니다.
나는 이것을 할 수있는 기능을 사용하지 않으며 수동으로해야합니다.
여기까지 제가 지금까지 가지고 있습니다.
을 시도 @ 솔루션 :
//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);
}
노트의 커플 : 10 %에도 사용 소수점에서 멀리 오른쪽 숫자를 분리 알고리즘의 일부입니다. 배열을 올바르게 정렬하고 char 배열의 끝에 \ n을 설명하기 위해 카운터에 "fudge factors"를 추가해야했습니다. while 루프에 넣는 조건문은 (주로 IN이 10 이하가 될 때) 몇 가지 엣지 케이스를 잡는 것이 었습니다.
'gdb'는 리눅스 터미널에서 훌륭하게 작동합니다. 그렇지 않으면, 당신은'printf()'로 코드를 측정 할 수있다. – mouviciel