所以我知道这是一个很长的标题,但我会试着把它分解一下。
我正在尝试创建一个C程序,它将读取.txt文件中未定数量的整数(假设文件只包含整数,并且每个整数用新行分隔),然后再将每个转换为二进制形式,然后将其导出到屏幕。
我正在尝试逐步创建程序,到目前为止,我已设法创建一个转换为二进制的程序,但只能从单个用户输入的整数(请参阅下面的代码)。
#include<stdio.h>
int main(){
long int integerInput,quotient;
int binaryNumber[100],i=1,j;
printf("Enter any integer: ");
scanf("%ld",&integerInput);
quotient = integerInput;
while(quotient!=0){
binaryNumber[i++]= quotient % 2;
quotient = quotient / 2;
}
printf("Equivalent binary value of integer %d: ",integerInput);
for(j = i -1 ;j> 0;j--)
printf("%d",binaryNumber[j]);
return 0;
}
我真的不确定如何有效地读取数字并逐一转换它们。我在一个包含10个不同整数的测试文件上尝试过如下所示的for循环(我已经声明了这个文件,并使用必要的文件I / O打开它)。
我尝试使用for循环编辑上面的代码,但这似乎没有帮助 - 它只是生成随机序列。
for(k=0;k<10;k++)
{
fscanf(test, "%d", &decimalNumber);
.... // rest of above code is inserted here, minus the scanf and prompts for user to enter a number
return 0;
}
非常感谢任何帮助!
答案 0 :(得分:0)
一些建议:
int64_t
中的#include<stdint.h>
代替long int
。检查错误,scanf
成功与否:
if (scanf("%ld", &integerInput) != 1){
printf("incorrect input.\n");
return 1; // error
}
您可以使用OS-pipe /重定向标准输入或文件:https://en.wikipedia.org/wiki/Redirection_(computing)
因此您可以将scanf
用于用户输入(stdin)和文件输入(os管道)
这个simpilies你编码。
所以其余的很简单:
然后在循环中使用循环:使用scanf
读取输入,然后转换为二进制,然后printf
:
您可以使用itoa
中的#include<stdlib.h>
将整数转换为字符串:
int32_t n = 1234567890;
char buf[65];
itoa(n, buf, 2);
printf("%s\n", buf); // 1001001100101100000001011010010
并放在一起,
工作示例代码:
#include<stdio.h>
#include<stdint.h>
#include<stdlib.h>
int main(){
int32_t n = 1234567890;
char buf[65];
while (1){
if (scanf("%ld", &n) != 1){
//printf("incorrect input\n"); // or EOF
return 1; // error or EOF
}
itoa(n, buf, 2);
printf("%s\n", buf); // 1001001100101100000001011010010
}
return 0;
}
并称之为:file1&lt; file2.txt
如果您愿意,也可以使用fscanf
我希望这会有所帮助。
答案 1 :(得分:0)
循环输入文件的简单方法是:
while( fscanf( fp, "%ld", &inputInteger ) == 1 )
{
// convert and display inputInteger
}
其中fp
是您的输入流。 *scanf
返回成功转化和分配的次数;由于我们只阅读单个项目,因此我们预计成功时返回值1
。这将循环直到EOF或fscanf
看到非空白,非十进制数字。
您可以使用可选的命令行参数从文件或标准输入读取程序:
int main( int argc, char **argv )
{
FILE *fp = stdin; // default to standard input
if ( argc > 1 )
{
if ( !(fp = fopen( argv[1], "r" )) )
{
fprintf( stderr, "Could not open %s\n", argv[1] );
return EXIT_FAILURE;
}
}
while ( fscanf( fp, "%ld", &inputInteger ) == 1 )
{
// convert and display integer
}
if ( fp != stdin )
fclose( fp );
}