跟进我提出的意见:
您的代码会出现在“工作” - 在它读取的输入,并产生 输出。您可能会考虑在您的printf
报表末尾添加\n
。什么不适合你?考虑使用 8*sizeof(int)-1
而不是31
。您事先并不知道您的系统上有多大的int int 。
有了一个小小的改变,你的代码的工作非常漂亮对我来说:
#include <stdio.h>
int main(int argc,char* argv[]) {
/*having issues with this in particular...*/
int number;
int newNumber;
int i;
printf("Enter a number in decimal...\n"); // <<< added a newline
scanf("%d",&number);
/* */
printf("%d in binary is: ",number);
for(i = sizeof(int)*8 - 1;i >= 0;i--) { // make sure `i` starts with the right size
newNumber = (number>>i);
if(newNumber & 1) {
printf("1");
}
else {
printf("0");
}
}
printf("\n"); // <<< print a newline
return 0;
}
当我运行它:
Enter a number in decimal...
123
123 in binary is: 00000000000000000000000001111011
注 - 你必须输入这个整数上班。如果你需要你的代码对输入中的用户“错误”更健壮,那么最好的办法就是将输入作为字符串读取,然后进行更多的解析。例如:
char buffer[100];
printf("enter an integer:\n");
fgets(buffer, 100, stdin);
// now you can look for spaces, letters, anything you want to skip, in the string
// you could even use sscanf().
// scanf() is a terribly fragile function to use, especially with "free form user input".
if(sscanf(buffer, "%d", &number) == 1) {
// successfully converted number... run your code
} else {
printf("unable to convert input to a number!\n%s\n", buffer);
return 0;
}
另注重读你的问题,你说“节目已转换为浮点号码这意味着你应该做的
float fnumber;
sscanf(buffer, "%f", &fnumber);
或
。
double dnumber;
sscanf(buffer, "%lf", &dnumber);
要做转换。但是,如果你想打印为一个二进制文件,你需要从FL处理点转换为无符号整数 - 移位操作对于浮点数没有明确定义。所以
unsigned int *intPtr, number;
intPtr = (unsigned int*) *fnumber; // this is hairy but it works
number = *intPtr;
,现在像以前一样使用number
- 你就可以打印出浮点数的二进制数。有些人会抱怨上述内容不符合标准。
union f2i
{
float fvalue;
unsigned int ivalue;
} Values;
然后输入分配到Values.fvalue
,并使用Values.ivalue
打印出二进制数:如果你创建了一个工会,他们可能更喜欢它。它仍然是一个黑客...
有代码和问题没有关系!!! – Jeyaram
你遇到了什么问题,你已经有'scanf(“%d”...)'这将输入字符串转换为数字? – Arkku
您的代码似乎“工作” - 它读取输入并生成输出。您可以考虑在'printf'语句的末尾添加'\ n'。什么不适合你?考虑使用8 * sizeof(int)-1'而不是'31'。您事先并不知道系统上有多大的int值。 – Floris