在 C 中的文件处理中没有读取正确的值
Not reading correct value in file handling in C
我的第一个 post :)
我写了一个小程序,我从文本文件中读取值并按原样打印它,然后打印它的等效二进制值
但是我遇到的问题是我打印的值与文件中的值不同
例如。我的文本文件中有 23,当我尝试读取它并打印我得到的值时 1
任何人都知道我缺少什么或我错在哪里。
我正在 post 编写我的代码
提前谢谢你
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
char number_read = 0;
char number = 0;
char number_of_ones = 0;
char remainder_value = 0;
char binary = 0;
char base = 0;
int main()
{
FILE *fp;
fp = fopen ("File.txt","r");
while(1)
{
number_read = fgetc(fp);
if( feof(fp) )
{
break ;
}
printf("\nnumber is=%c", number_read);
while (number_read>0)
{
remainder_value = number_read % 2;
/* To count no.of 1s */
if (remainder_value == 1)
{
number_of_ones++;
}
binary = binary + remainder_value * base;
number_read = number_read/2;
base = base * 10;
}
}
fprintf("\nINPUT number is = %d\n", number);
fprintf("\nIt's in the binary number is = %d\n", binary);
fprintf("\nNo.of 1's in the binary number is = %d\n", number_of_ones);
fclose(fp);
return 0;
}
在您的案例中传递给 fprintf
函数的参数是错误的。将部分更改为以下内容:
fprintf(fp,"\nINPUT number is = %d\n", number);
fprintf(fp,"\nIt's in the binary number is = %d\n", binary);
fprintf(fp,"\nNo.of 1's in the binary number is = %d\n",number_of_ones);
所以添加 fp
作为 fprintf 的第一个参数。
而要获取字符number_read
的整数值,利用C中提供的atoi
函数。(参考this。)
#include <stdio.h>
#include <stdlib.h>
char number_read = 0;
int number = 0;
int number_of_ones = 0;
int remainder_value = 0;
int binary = 0;
int base = 1;
int main(){
FILE *fp = fopen("File.txt", "r");
while (1){
number_read = fgetc(fp);
if (feof(fp)){
break;
}
base = 1;
number_of_ones = remainder_value = binary = 0;
printf("\nnumber is=%c\n", number_read);
number = number_read-48;
while (number>0){
remainder_value = number % 2;
/* To count no.of 1s */
if (remainder_value == 1){
number_of_ones++;
}
binary = binary + remainder_value * base;
number = number/ 2;
base = base * 10;
if (number == 1){
binary = binary + 1 * base;
number = 0;
}
}
printf("\nINPUT number is = %d\n", number_read-48);
printf("\nIt's in the binary number is = %d\n", binary);
printf("\nNo.of 1's in the binary number is = %d\n", number_of_ones);
}
return 0;
}
@Garryp,
我没有触及程序的逻辑,我不明白为什么你将基数保持为 0 或将所有数字变量保留为 char,这可以使用 int 变量本身轻松实现。您实际遇到的唯一问题是文件操作,请查找更新后的代码。
还有为什么不必要地使用 "number" 变量?
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int number_read = 0;
char number = 0;
int number_of_ones = 0;
int remainder_value = 0;
int binary = 0;
int base = 1;
int main()
{
FILE *fp,*fp1;
char buff[5];
fp = fopen("C:\Users\50022314\Desktop\mytest.txt", "r+");
fp1 = fopen("C:\Users\50022314\Desktop\mytest1.txt", "a+");
while (fgets(buff, sizeof(buff), fp) != NULL)
{
number_read = atoi(buff);
printf("\nnumber is=%d", number_read);
while (number_read > 0)
{
remainder_value = number_read % 2;
/* To count no.of 1s */
if (remainder_value == 1)
{
number_of_ones++;
}
binary = binary + remainder_value * base;
number_read = number_read / 2;
base = base * 10;
}
fprintf(fp1, "\nINPUT number is = %d\n", number);
fprintf(fp1, "\nIt's in the binary number is = %d\n", binary);
fprintf(fp1, "\nNo.of 1's in the binary number is = %d\n", number_of_ones);
}
fclose(fp);
fclose(fp1);
return 0;
}
您好,感谢您回答我的 post
我检查了我做错了什么,这是我的代码,运行良好
我 post 编辑了以供将来作为 stack follower 的参考
还需要添加一些额外的功能
我正在尝试将文件中的数字的十进制转换为二进制
我必须避免空格、空行和行尾空格,然后打印数字。我仍在努力。任何人提供提示或代码将不胜感激。谢谢大家
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#define BUFFER 5
char number_read = 0;
char number_of_ones = 0;
char remainder_value = 0;
char binary = 0;
char base = 0;
char buff[BUFFER];
int main()
{
FILE *fp; //file pointer fp
fp = fopen("File.txt","r+");
while (fgets(buff, sizeof(buff), fp) != NULL)
{
number_read = atoi(buff); //ASCII to integer
printf("\nnumber is=%d", number_read);
while (number_read > 0)
{
remainder_value = number_read % 2;
/* To count no.of 1s */
if (remainder_value == 1)
{
number_of_ones++;
}
binary = binary + remainder_value * base;
number_read = number_read / 2;
base = base * 10;
}
printf("\nNo.of 1's in It's binary representation is = %d\n",number_of_ones);
number_of_ones = 0;
}
fclose(fp);
return 0;
}
我的第一个 post :) 我写了一个小程序,我从文本文件中读取值并按原样打印它,然后打印它的等效二进制值 但是我遇到的问题是我打印的值与文件中的值不同 例如。我的文本文件中有 23,当我尝试读取它并打印我得到的值时 1 任何人都知道我缺少什么或我错在哪里。 我正在 post 编写我的代码 提前谢谢你
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
char number_read = 0;
char number = 0;
char number_of_ones = 0;
char remainder_value = 0;
char binary = 0;
char base = 0;
int main()
{
FILE *fp;
fp = fopen ("File.txt","r");
while(1)
{
number_read = fgetc(fp);
if( feof(fp) )
{
break ;
}
printf("\nnumber is=%c", number_read);
while (number_read>0)
{
remainder_value = number_read % 2;
/* To count no.of 1s */
if (remainder_value == 1)
{
number_of_ones++;
}
binary = binary + remainder_value * base;
number_read = number_read/2;
base = base * 10;
}
}
fprintf("\nINPUT number is = %d\n", number);
fprintf("\nIt's in the binary number is = %d\n", binary);
fprintf("\nNo.of 1's in the binary number is = %d\n", number_of_ones);
fclose(fp);
return 0;
}
在您的案例中传递给 fprintf
函数的参数是错误的。将部分更改为以下内容:
fprintf(fp,"\nINPUT number is = %d\n", number);
fprintf(fp,"\nIt's in the binary number is = %d\n", binary);
fprintf(fp,"\nNo.of 1's in the binary number is = %d\n",number_of_ones);
所以添加 fp
作为 fprintf 的第一个参数。
而要获取字符number_read
的整数值,利用C中提供的atoi
函数。(参考this。)
#include <stdio.h>
#include <stdlib.h>
char number_read = 0;
int number = 0;
int number_of_ones = 0;
int remainder_value = 0;
int binary = 0;
int base = 1;
int main(){
FILE *fp = fopen("File.txt", "r");
while (1){
number_read = fgetc(fp);
if (feof(fp)){
break;
}
base = 1;
number_of_ones = remainder_value = binary = 0;
printf("\nnumber is=%c\n", number_read);
number = number_read-48;
while (number>0){
remainder_value = number % 2;
/* To count no.of 1s */
if (remainder_value == 1){
number_of_ones++;
}
binary = binary + remainder_value * base;
number = number/ 2;
base = base * 10;
if (number == 1){
binary = binary + 1 * base;
number = 0;
}
}
printf("\nINPUT number is = %d\n", number_read-48);
printf("\nIt's in the binary number is = %d\n", binary);
printf("\nNo.of 1's in the binary number is = %d\n", number_of_ones);
}
return 0;
}
@Garryp,
我没有触及程序的逻辑,我不明白为什么你将基数保持为 0 或将所有数字变量保留为 char,这可以使用 int 变量本身轻松实现。您实际遇到的唯一问题是文件操作,请查找更新后的代码。 还有为什么不必要地使用 "number" 变量?
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int number_read = 0;
char number = 0;
int number_of_ones = 0;
int remainder_value = 0;
int binary = 0;
int base = 1;
int main()
{
FILE *fp,*fp1;
char buff[5];
fp = fopen("C:\Users\50022314\Desktop\mytest.txt", "r+");
fp1 = fopen("C:\Users\50022314\Desktop\mytest1.txt", "a+");
while (fgets(buff, sizeof(buff), fp) != NULL)
{
number_read = atoi(buff);
printf("\nnumber is=%d", number_read);
while (number_read > 0)
{
remainder_value = number_read % 2;
/* To count no.of 1s */
if (remainder_value == 1)
{
number_of_ones++;
}
binary = binary + remainder_value * base;
number_read = number_read / 2;
base = base * 10;
}
fprintf(fp1, "\nINPUT number is = %d\n", number);
fprintf(fp1, "\nIt's in the binary number is = %d\n", binary);
fprintf(fp1, "\nNo.of 1's in the binary number is = %d\n", number_of_ones);
}
fclose(fp);
fclose(fp1);
return 0;
}
您好,感谢您回答我的 post 我检查了我做错了什么,这是我的代码,运行良好 我 post 编辑了以供将来作为 stack follower 的参考
还需要添加一些额外的功能 我正在尝试将文件中的数字的十进制转换为二进制 我必须避免空格、空行和行尾空格,然后打印数字。我仍在努力。任何人提供提示或代码将不胜感激。谢谢大家
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#define BUFFER 5
char number_read = 0;
char number_of_ones = 0;
char remainder_value = 0;
char binary = 0;
char base = 0;
char buff[BUFFER];
int main()
{
FILE *fp; //file pointer fp
fp = fopen("File.txt","r+");
while (fgets(buff, sizeof(buff), fp) != NULL)
{
number_read = atoi(buff); //ASCII to integer
printf("\nnumber is=%d", number_read);
while (number_read > 0)
{
remainder_value = number_read % 2;
/* To count no.of 1s */
if (remainder_value == 1)
{
number_of_ones++;
}
binary = binary + remainder_value * base;
number_read = number_read / 2;
base = base * 10;
}
printf("\nNo.of 1's in It's binary representation is = %d\n",number_of_ones);
number_of_ones = 0;
}
fclose(fp);
return 0;
}