В общем, такая задача стоит: в .txt файл в столбик записаны значения в шестнадцатеричном виде.
ПР:
A5
23
В4
итд
Написать программу на си что бы программа брала эти значения, переводила в десятичный вид и сохраняла в другой .txt файл
Понимаю, что все должно быть просто, но физически просто не успеваю разобраться с этим.
Помогите, пожалуйста, буду благодарен
Другие языки программирования и технологии
программирование на языке си
А этот код сложнее, но запишет все числа, в которых нет ошибок. А также выдаст исключения и сообщения об ошибках.
В одной строке - одно число.
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <conio.h>
#define N 11
enum command { OPEN, CREATE, CLOSE, ERROR, END };
void message(short);
void main() {
char line[N];
char * ptr;
char str[N];
int num, count = 0;
FILE * stream_read, * stream_write;
errno_t err;
err = fopen_s(&stream_read, "hex.txt", "r");
if (err != 0) message(OPEN);
err = fopen_s(&stream_write, "dec.txt", "w+");
if (err != 0) message(CREATE);
if (!err)
while (!feof(stream_read)) {
++count;
if(fgets(line, N, stream_read) == NULL) {
message(ERROR);
printf("%d\n", count);
}
else {
num = strtol(line, &ptr, 16);
_itoa_s(num, str, N, 10);
fputs(str, stream_write);
fputs("\n", stream_write);
}
}
if (stream_read && fclose(stream_read) != 0) message(CLOSE);
if (stream_write && fclose(stream_write) != 0) message(CLOSE);
message(END);
_getch();
}
void message(short command) {
setlocale(LC_CTYPE, "Russian_Russia.1251");
switch (command) {
case OPEN: printf("\a Невозможно открыть файл! \n"); break;
case CREATE: printf("\a Невозможно создать файл! \n"); break;
case CLOSE: printf("\a Невозможно закрыть файл! \n"); break;
case ERROR: printf("\a Ошибка чтения в строке: "); break;
case END: printf("\n Конец! "); break;
} setlocale(LC_CTYPE, "English_United States.866");
}
В одной строке - одно число.
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <conio.h>
#define N 11
enum command { OPEN, CREATE, CLOSE, ERROR, END };
void message(short);
void main() {
char line[N];
char * ptr;
char str[N];
int num, count = 0;
FILE * stream_read, * stream_write;
errno_t err;
err = fopen_s(&stream_read, "hex.txt", "r");
if (err != 0) message(OPEN);
err = fopen_s(&stream_write, "dec.txt", "w+");
if (err != 0) message(CREATE);
if (!err)
while (!feof(stream_read)) {
++count;
if(fgets(line, N, stream_read) == NULL) {
message(ERROR);
printf("%d\n", count);
}
else {
num = strtol(line, &ptr, 16);
_itoa_s(num, str, N, 10);
fputs(str, stream_write);
fputs("\n", stream_write);
}
}
if (stream_read && fclose(stream_read) != 0) message(CLOSE);
if (stream_write && fclose(stream_write) != 0) message(CLOSE);
message(END);
_getch();
}
void message(short command) {
setlocale(LC_CTYPE, "Russian_Russia.1251");
switch (command) {
case OPEN: printf("\a Невозможно открыть файл! \n"); break;
case CREATE: printf("\a Невозможно создать файл! \n"); break;
case CLOSE: printf("\a Невозможно закрыть файл! \n"); break;
case ERROR: printf("\a Ошибка чтения в строке: "); break;
case END: printf("\n Конец! "); break;
} setlocale(LC_CTYPE, "English_United States.866");
}
#include <stdio.h>
main(){
int m; FILE *f=fopen("in.txt","r"),*p=fopen("out.txt","w");
while(1){fscanf(f,"%x",&m); if(getc(f)==EOF)break; fprintf(p,"%d\n",m);}
fclose(f); fclose(p); return 0;}
main(){
int m; FILE *f=fopen("in.txt","r"),*p=fopen("out.txt","w");
while(1){fscanf(f,"%x",&m); if(getc(f)==EOF)break; fprintf(p,"%d\n",m);}
fclose(f); fclose(p); return 0;}
Если в файле в последней строке отсутствует символ перехода на новую строку, то программа выше не запишет в файл-результат последнее значение из исходного. Кроме этого, данный код немного проще:
#include <stdio.h>
int main() {
int v;
FILE *in = fopen("in.txt", "r");
FILE *out = fopen("out.txt", "w");
while ( fscanf(in, "%x", &v) > 0 ) fprintf(out, "%d\n", v);
fclose(in);
fclose(out);
return 0;
}
#include <stdio.h>
int main() {
int v;
FILE *in = fopen("in.txt", "r");
FILE *out = fopen("out.txt", "w");
while ( fscanf(in, "%x", &v) > 0 ) fprintf(out, "%d\n", v);
fclose(in);
fclose(out);
return 0;
}
Похожие вопросы
- Программирование на языке СИ с использованием подпрограммы-функции
- какую программу лучше использовать для программирования на языке Си?
- Найти число Фибоначчи, ближайшее к заданному натуральному числу N. (программирование в языке Си)
- Программирование на языке Си. Нужна небольшая помощь.
- Почему язык СИ такой сложный?
- программирование, язык си
- Программирование! По языку C#!
- Вопросы по языку СИ
- Язык Си. Читаю K&R (книга автора языка с примерами). Упражнение 1.10
- язык программирования. какой язык программирования лутьше изучать: C, C++, C#, Java?