所以我有这个代码获取用户输入,char by char(不使用char数组),应该发生的是每7个字母对应一个字母,7个字母中的每个字母都是1或0,取决于该字母的ascii值是偶数还是奇数(即使为0,奇数为1)。
例如:" GCJLLBI" =" 1100001",转换为decimal = 97,这是' a'的ascii代码。
因此,如果用户输入" GCJLLBI"然后程序需要将其转换为二进制,然后转换为十进制,然后使用%c和十进制值打印
不能使用数组我试图只使用原语,没有抽象数据类型或数组。
这是我到目前为止的代码:
/** given a binary number, convert to decimal. */
int binToDec(int binary)
{
int decimal = 0, i = 1, remainder;
/* Iterate until number becomes zero */
while (binary != 0)
{
remainder = binary % 10;
decimal = decimal + remainder * i;
i = i * 2;
binary = binary / 10;
}
return decimal;
}
/* Decodes text.*/
int decode(void) {
char ch;
printf("? ");
discardToEOL(); /*Discards any newlines from previous. */
/*Get Input */
do {
scanf("%c", &ch);
if (ch >= 0 && ch <= 128 && ch != 10) {
//Send each char to get converted
//to binary and then convert binary to ddecimal,
//then display as char.
}
} while(ch != '\n');
printf("\n");
}
所以我真的需要帮助并且不明白,如果用户输入21个字符,那些是由char输入char而不是数组,我该如何解析那些成组7,然后根据它们的偶数或奇数值将它们转换为二进制?
答案 0 :(得分:0)
你只需添加某种计数器和累加器(总和)。这里的问题是pow()。因为它接受双倍。您也可以制作自己的pow函数,它接受整数并将它们相乘多次。 (对不起,我的答案,stackoverflow中的第一个答案)
int count = 0; //add a counter here
int sum = 0;
do {
scanf("%c", &ch);
if (ch >= 0 && ch <= 128 && ch != 10) {
//Send each char to get converted
//to binary and then convert binary to ddecimal,
sum += pow(2,count) * convertedBinaryNumber;
//convertedBinaryNumber either 1 or 0
count++;
if(count == 7){
count == 0;
//print sum here to ascii
sum = 0;
}
}
} while(ch != '\n');
答案 1 :(得分:0)
您可以从输入流中一次读取一个字符,并保持当前字符值的运行记录。
下面的代码首先将value
初始化为64,如果输入字符的值为奇数,则将其添加到当前打印字符的总值。然后value
减少,循环继续。当value
达到零时,将打印与上一组输入字符关联的当前打印字符,并重置value
和cur_sum
。循环继续,直到到达换行符或文件结尾。循环退出后,应该剩下一个字符要打印(与\n
之前的输入相关联的字符)。如果value
此时非零,则输入字符数不是7的倍数,并打印错误消息;否则打印最后一个字符。
#include <stdio.h>
int main(void)
{
int c;
int value = 64;
int cur_sum = 0;
while ((c = getchar()) != '\n' && c != EOF) {
if (value == 0) {
putchar(cur_sum);
value = 64;
cur_sum = 0;
}
cur_sum += (value * (c % 2));
value /= 2;
}
if (value) {
putchar('\n');
puts("Input format error");
} else {
putchar(cur_sum);
putchar('\n');
}
return 0;
}
示例互动:
GJLIBBLGCJBIBIGCJIIBBGCJIIBBGCJICICJGJLLBBGCIJGCIGCJICICGCIJLIBGCJGCJJGCJLIBBJGLLBBI
Hello world!