В файл С занести все цифры из А. Другие символы дописать в В - C (СИ)

  1. Здравствуйте. Возник вопрос: Тип.char. (Файлы) В С занести все цифры из А. Другие символы дописать в В, как это реализовать?


textual

Код к задаче: «В файл С занести все цифры из А. Другие символы дописать в В - C (СИ)»

#include <stdio.h>
#include <assert.h>
 
int main() {
    FILE* a, * b, * c, * f;
    int ch;
    assert((a = fopen("a.txt", "r")) != NULL);
    assert((b = fopen("b.txt", "w")) != NULL);
    assert((c = fopen("c.txt", "w")) != NULL);
 
    while ((ch = fgetc(a)) != EOF) {
        f = (('0' <= ch) && (ch <= '9')) ? c : b;
        fputc(ch, f);
    }
 
    return 0;
}

СДЕЛАЙТЕ РЕПОСТ

12   голосов, оценка 4.167 из 5



Похожие ответы
  1. Создать массив, заполнить 20 элементами, сложить и вывести на экран все кратные 3Добавлено через 4 минуты Помогите плиз

  1. Заполнить одномерный массив случайными числами. Вывести на экран все элементы массива, являющимся двухзначными числами. Буду благодарен)))

  1. Дан текст, содержит от 2 до 30 слов, в каждом из которых от 2 до 10 латинских букв; между соседними словами - не менее одного пробела. Написать все слова, отличные от последнего слова, предварительно преобразовав каждое из них по следующему правилу: 1) перенести первую букву в конец слова; 2) перенести последнюю букву в начало слова.

  1. Подскажите ошибку, которую допустила в программе. Задание такое: Вводится текст, за которым следует точка. В алфавитном порядке напечатать (по разу) все строчные русские буквы, входящие в этот текст. (требуется написать программу на языке СИ)C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 #include #include   int main() { char *user_input = malloc(sizeof(char)); char *output = malloc(sizeof(char)); int i = 0; int d = 0; int flag = 1; while (1) { scanf("%c", &user_input[i]); if (user_input[i] == '.') {user_input[i]='\0';break;} for (int j = 0; j < i; i++) { if (user_input[i] == output[j]) { flag = 0; break; } } if (flag) { output[d] = user_input[i]; d++; output =(char*) realloc(output, (d + 2) * sizeof(char)); } flag = 1; i++; user_input = (char*)realloc(user_input, (i + 1) * sizeof(char)); } printf("input %s",user_input); printf("output %s",output); char x; for (int m = 0; m < d; m++) { for (int j = d - 1; j > m; j--) { if (output[j - 1] > output[j]) { x = output[j - 1]; output[j - 1] = output[j]; output[j] = x; } } } output[d + 1] = '\0'; printf("%s", output); return 0; }

  1. Помогите реализовать задание: Заменить все пары букв «XY» на цифры «12», через do-while. Находил похожее, но там решения так и не было получено.

  1. В общем, я запутался. Вот задание. Необходимо разработать программу согласно варианту задания. При реализации использовать указатели на функции и (или) массивы указателей на функции. -------------------------------------------------- Дан список записей типа ТОВАР (размер списка и его элементы вводятся пользователем). Упорядочить список по любому из полей в любом направлении. Поле и направление выбирает пользователь. В функцию сортировки должен передаваться указатель на функцию сравнения двух элементов. (20 баллов). ТОВАР: - наименование товара (строка 15 символов); - единицы измерения (строка 5 символов); - цена (вещественное число с двумя знаками после запятой); - количество (целое положительное число). То, что накаляканоC1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 #include #include #include #include #include typedef struct {     char  name[16];     char  mesr[6];     double price;     int count; }Good; typedef Good *Ptr; typedef int (*Pfun)( void *, void * ); int cmpNM ( void *, void * ); int cmpCNT( void *, void * ); void sortbychoice( Ptr , int, size_t, void (*), Pfun ); void swap ( Ptr , Ptr ); int main( int argc, char *argv[ ] ) {     //printf( "%d",  offsetof( Good, count) );     int d = 0, count;     printf( "Enter count of lists: ");     while( !d || count <= 0)     {         d = scanf( "%d", &count );         if( !d || count <= 0 ) { while( getchar( ) != '\n' ); printf( "Repeat: "); }     }     fflush( stdin );     int i;     Ptr list = (Good*)calloc( count, sizeof(Good));     for( i = 0; i < count; i++ ) { printf( "Name|Measure|Price|Count: " ); scanf( "%s%s%lf%d", list[i].name, list[i].mesr, &list[i].price, &list[i].count ); while( getchar( ) != '\n' );}       //       //sortbychoice( list, count, sizeof(char)*15, list[i].name, cmpNM );     sortbychoice( list, count, offsetof( Good, count ), &list[i].count, cmpCNT);     for( i = 0; i < count; i ++ ) printf( "Name: %s | Measure: %s | Price: %3.2lf | Count: %03d\n", list[i].name, list[i].mesr, list[i].price, list[i].count );     system( "pause" );     getch( );     return 0; }   void swap ( Ptr arg1, Ptr arg2 ) {    Good temp = *arg1;    *arg1 = *arg2;    *arg2 = temp;    return; } int cmpNM( void * arg1, void * arg2 ) {     if( strcmp( (char*)arg1, (char*)arg2 ) == 1 ) return 1;     else return 0; } int cmpCNT( void * arg1, void *arg2 ) {     if(*((int*)arg1) > *((int*)arg2)) return 1;     else return 0; } void sortbychoice ( Ptr good, int count, size_t size, void *arr, Pfun fun  ) {      Ptr mass = good;      int i, j, im;      char * ar = ( char* )arr;      for( i = 0; i < count - 1; i++ ){         im = i;         for( j = i + 1; j < count; j++ ) if( fun( (void*)( ar + im*size),  (void*)( ar + j * size )) ) im = j;         swap( &mass[i], &mass[im] );      }      return; }Добавлено через 3 минуты дело в том, что я не могу понять, как мне обращаться к началу памяти одного и того же поля в массиве структур. Делал такое с обычными массивами, вроде всё работало. Вот как делал:C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 void SortArray( void *array, unsigned num, size_t size, int (*fun)(void *arg1, void *arg2), void (*fun1)( void *arg1, void *arg2)) {     int i, j;     int imin, imax;     char *ptr = (char* )array; // указатель на начало памяти массива     for( i = 0; i < num - 1; i += 2 )     {         imin = i;         for( j = i + 2; j < num; j += 2 )         if( fun( (void*)(ptr + imin*size), (void*)(ptr + j*size)) > 0 ) imin = j;                 fun1( ptr + i*size, ptr + imin*size);// смещение указателя на size бацтов массив     }  for( i = 1; i < num - 1; i += 2 )     {         imax = i;         for( j = i + 2; j < num; j += 2 )         if( fun( (void*)(ptr + imax*size), (void*)(ptr + j*size)) < 0 ) imax = j;                 fun1( ptr + i*size, ptr + imax*size );// смещение указателя на size бацтов массив     } }Добавлено через 32 минуты Сообщение от Michail97 //sortbychoice( list, count, sizeof(char)*15, list[i].name, cmpNM ); * * sortbychoice( list, count, offsetof( Good, count ), &list[i].count, cmpCNT); На эти строки на намекать. ИсправилДобавлено через 3 минуты В общем, для сортровки по кол - ву работает вроде.C1 2 3 4 5 6 7 8 9 10 11 12 void sortbychoice ( Ptr good, int count, void *arr, Pfun fun  ) {      Ptr mass = good;      int i, j, im;      char * ar = ( char * )arr; // указатель на начало памяти выбранного поля аргумента arg      for( i = 0; i < count - 1; i++ ){         im = i;         for( j = i + 1; j < count; j++ ) if( fun( (void*)( ar + im*sizeof( Good)),  (void*)( ar + j * sizeof(Good) )) ) im = j;         swap( &mass[i], &mass[im] );      }      return; }Сейчас попробую со строками также провернутьДобавлено через 9 минут В общем, пока работает. Если найдёте грабли ещё, укажите, пожалуйста. C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 #include #include #include #include #include typedef struct {     char  name[16];     char  mesr[6];     double price;     int count; }Good; typedef Good *Ptr; typedef int (*Pfun)( void *, void * ); int cmpNM ( void *, void * ); int cmpCNT( void *, void * ); void sortbychoice( Ptr , int, void (*), Pfun ); // для 1 - ого аргумента необходимо передать 2 - ой указатель void swap ( Ptr , Ptr ); int main( int argc, char *argv[ ] ) {     //printf( "%d",  offsetof( Good, count) );     int d = 0, count;     printf( "Enter count of lists: ");     while( !d || count <= 0)     {         d = scanf( "%d", &count );         if( !d || count <= 0 ) { while( getchar( ) != '\n' ); printf( "Repeat: "); }     }     fflush( stdin );     int i;     Ptr list = (Good*)calloc( count, sizeof(Good));     for( i = 0; i < count; i++ ) { printf( "Name|Measure|Price|Count: " ); scanf( "%s%s%lf%d", list[i].name, list[i].mesr, &list[i].price, &list[i].count ); while( getchar( ) != '\n' );}       //       sortbychoice( list, count,list[0].name, cmpNM );     //sortbychoice( list, count, &list[0].count, cmpCNT);     for( i = 0; i < count; i ++ ) printf( "Name: %s | Measure: %s | Price: %3.2lf | Count: %03d\n", list[i].name, list[i].mesr, list[i].price, list[i].count );     system( "pause" );     getch( );     return 0; }   void swap ( Ptr arg1, Ptr arg2 ) {    Good temp = *arg1;    *arg1 = *arg2;    *arg2 = temp;    return; } int cmpNM( void * arg1, void * arg2 ) {     if( strcmp( (char*)arg1, (char*)arg2 ) == 1 ) return 1;     else return 0; } int cmpCNT( void * arg1, void *arg2 ) {     if(*((int*)arg1) > *((int*)arg2)) return 1;     else return 0; } void sortbychoice ( Ptr good, int count, void *arr, Pfun fun  ) {      Ptr mass = good;      int i, j, im;      char * ar = ( char * )arr;      for( i = 0; i < count - 1; i++ ){         im = i;         for( j = i + 1; j < count; j++ ) if( fun( (void*)( ar + im*sizeof( Good)),  (void*)( ar + j * sizeof(Good) )) ) im = j;         swap( &mass[i], &mass[im] );      }      return; }

  1. Все Работает если вводить без пробелов, но с пробелом выводится только первое число, (если можно с кратким объяснением пожалуйста)C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #include #include     int main(){       char str[100];     int x = 0;     scanf("%s", str);     for(int i = 0;i < strlen(str);i++)     {         if((str[i] >= '1') && (str[i] <= '9'))         {             x += ((int)str[i] - 48);                     }     }     printf("%d", x);       return 0; }

  1. Задача вроде и понятна. но есть пару моментов. Обязательно нужно использовать функции библиотеки . Собственно я нашел совершенно подходящую функцию для поиска символа - char * strrchr( const char *string, int i). Но как ее притулить мне совершенно не понятно. Если есть другие варианты, то от них я тоже не отказываюсь. C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include #include #include #include #include int main() {     int i,n;       for(i=0;i<100;i++)     {             n=pow(i,2);         //  char * strrchr( const char *string, int i)         printf("\n%d",n);     }         getch(); }

  1. Возможно ли это сделать на базовом уровне, понятном для понимания школьнику

  1. по идее программа должна вычислять сумму всех положительных элементов квадратной матрицыC1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include #include  main () {int n=3,m=3,a[3][3],i,j,z; z=0; for(i=n;i0) z+=a[i][j]; printf("z=%d\n",&z);} system("pause"); return(0); }