Тема: Допоможіть з Файлами на С

У мене завдання сформувати файл, який містить інформацію про 10 автолюбителів: прізвище, марка автомобіля, колір, номер. Використовуючи ці дані, надати інформацію про автолюбителів, які мають “Жигулі” білого кольору і їх номер починається з 45.
Я написав код, але він видає помилки, допоможіть виправити.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main ()
{
    int n;
    int pr;
    int m;
    int k;
    int no;
FILE *A;    
A=fopen("cars.txt","w");
for (int i=0; i<10; i++){
printf("Введіть кількість автолюбителів: ");
scanf("%i",&n); 

printf("Прізвище: ");
scanf("%i",&pr); 

printf("Марка: ");
scanf("%i",&m); 

printf("Колір: ");
scanf("%i",&k); 

printf("Номер: ");
scanf("%i",&no);

printf("%i\n%i\n%i\n%i\n",pr,m,k,no);
fprintf(A,"%i\n%i\n%i\n%i\n",pr,m,k,no); 
}
fclose(A);

A=fopen("car.txt","r+");   
printf("Білі жигулі з номером, який починається на 45 :\n");
while (!feof(A))
        {
            scanf(A,"%i\n%i\n%i\n%i\n",pr,m,k,no);
            if (m="жигулі" &&
                k="білий"  &&
                no(1,2)="45"){
                printf("%i%i%i%i", pr, m, k, no);
                }
            
fclose(A);
return 0;
}
}

Це видає компілятор

main.c:41:16: warning: passing argument 1 of ‘scanf’ from incompatible pointer type [-Wincompatible-pointer-types]
   41 |          scanf(A,"%i\n%i\n%i\n%i\n",pr,m,k,no);
      |                ^
      |                |
      |                FILE * {aka struct _IO_FILE *}
In file included from main.c:3:
/usr/include/stdio.h:397:42: note: expected ‘const char * restrict’ but argument is of type ‘FILE *’ {aka ‘struct _IO_FILE *’}
  397 | extern int scanf (const char *__restrict __format, ...) __wur;
      |                   ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~
main.c:44:14: error: called object ‘no’ is not a function or function pointer
   44 |              no(1,2)="45"){
      |              ^~
main.c:13:9: note: declared here
   13 |     int no;
      |         ^~

Я думаю, що номер потрібно оголосити як string, якщо це так, то як це зробити?

2

Re: Допоможіть з Файлами на С

Ви взялися за занадто складне завдання для себе. Почніть читати підручник з початку(я раджу Стівен Пратта) та виконувати простіші завдання. І якщо вам треба здати на завтра, тому часу нема розбиратися з цим - засуньте собі в сраку цю причину та забудьте сюди дорогу.

Подякували: lucas-kane1

3

Re: Допоможіть з Файлами на С

я вас зрозумів, дякую за пораду

4

Re: Допоможіть з Файлами на С

Грубо. Але справедливо.

5

Re: Допоможіть з Файлами на С

Ви придивіться краще до "відповіді". Жодне посилання на документацію не врятує цей "витвір".

6

Re: Допоможіть з Файлами на С

Прихований текст
0xDADA11C7 написав:

Ви придивіться краще до "відповіді". Жодне посилання на документацію не врятує цей "витвір".

  *THUMBSUP*

7

Re: Допоможіть з Файлами на С

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main ()
{
   int n, pr, m, k, no;
    FILE *A;    
    A=fopen("cars.txt","w");
    if (A!= NULL) {
for (int i=0; i<n; i++){
puts("Введіть кількість автолюбителів: ");
scanf("%d",&n); 

puts("Прізвище: ");
scanf("%d",&pr); 

puts("Марка: ");
scanf("%d",&m); 

puts("Колір: ");
scanf("%d",&k); 

puts("Номер: ");
scanf("%d",&no);

printf("%d\n%d\n%d\n%d\n",pr,m,k,no);
fprintf(A,"%d\n%d\n%d\n%d\n",pr,m,k,no); 
}
}
fclose(A);

{
    A=fopen("car.txt","r+");
    if (A!= NULL) {
puts("Білі жигулі з номером, який починається на 45 :\n");
while (!feof(A))
        {
            fscanf(A,"%d\n%d\n%d\n%d\n",&pr,&m,&k,&no);
            if (m=="жигулі" &&
                k=="білий"  &&
                no(1,2)=="45"){
                printf("%d%d%d%d", pr, m, k, no);
                }
            
fclose(A);
return 0;
}
}
}

Так вже трохи краще?

8

Re: Допоможіть з Файлами на С

В мене таке відчуття, що ви бездумно пісюном по клявіятурі б'єте, не розуміючи ані які параметри приймає функція, ані типи даних, ані оператори, які ви застосовуєте. Пробачте, але якщо вам якась допомога і потрібна, то психологічна - ви чомусь вирішили що ви Бог знаєте мову С і здатні нею писати програми. Про таку другорядну насправді річ, як форматування коду (оті всі відступи, як роблять інші програмісти, щоби читати програму було легко), я взагалі мовчу, бо це не впливає на працездатність програми, але від цього ваш потік свідомості виглядає ще огиднішим.

9

Re: Допоможіть з Файлами на С

Що ви собі позволяєте, якщо не вмієте нормально розмовляти, то не пишіть краще

10

Re: Допоможіть з Файлами на С

Я не бачу в чому я неправий. Це ви краще не пишіть ваш потік свідомості замість коду. У вас чи не в кожному рядку по помилці, а в деяких рядках - декілька одночасно.

11

Re: Допоможіть з Файлами на С

Я тут модер, до речі, тому обробив вашу скаргу  *PARDON*

12

Re: Допоможіть з Файлами на С

Тоді в чому взагалі заключається суть цього форуму?

13

Re: Допоможіть з Файлами на С

Конкретні запитання будуть? За вас код писати ніхто не збирається, а та мазанина котру ви вважаєте кодом – це сміття (вибачте за порівняння). Я розумію, що ви початківець та що вам усі винні, але майте хоч якусь повагу. Перш ш ніж створювати тему (хоча з таким підходом її взагалі не мало бути див. правила форуму) переконайтесь чи бува не має на форумі такої ж проблеми як у вас.

14

Re: Допоможіть з Файлами на С

Хороше питання. Суть форуму: в допомозі програмістам, які здатні навчатися, але певні моменти їи незрозумілі; в обміну досвідом між професіоналами; для допомоги майбутнім айтішникам в виборі шляху; для пропагування якісних навчальних матеріялів; для координації дій, наприклад при наповненні вікіпедії; для хизування своїми проєктами; просто для спілкування айтішників.

15

Re: Допоможіть з Файлами на С

stovbanolexandr написав:

Тоді в чому взагалі заключається суть цього форуму?

допомагати нужденним, але ваш код настільки поганий, що складається враження, ніби це якогось водія маршрутки попросили написати цей код, і дали спочатку подивитись на приклад коду. Він бачить різні слова і здатен написати щось схоже, але розуміння того, що він пише - повний нуль.

Якщо ви початківець-початківець, і хочете навчитись писати працюючий код мовою С, то вам варто або пройти курс, або прочитати книжку, де це все пояснюється для початківців. В цій книжці, чи курсі, будуть задачки, які ви зможете спробувати пройти самотужки після того, як вдумливо прочитаєте черговий розділ. Якщо у вас не вийде з першого разу, тоді спробуйте самотужки розібратись, в чому може бути проблема. І якщо через кілька днів у вас все одно нічого не вийде - питайте на форумі.

Але ви без найменшої крихти знань приходите на форум, до живих людей, і забираєте їх час. Це хамство вищої міри.  *FACEPALM*  *FACEPALM*  *FACEPALM*  *FACEPALM*

Подякували: 0xDADA11C71

16

Re: Допоможіть з Файлами на С

Я вже майже написав все, але воно не виводить мені окремо інформацію про власників жигулі

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{   
    int n;
    char pr[60];
    char m[60];
    char k[60];
    int no;
    FILE *A = fopen("cars.txt","w");
    if (A!= NULL) {
        printf("Введiть кiлькiсть автолюбителiв: ");
        scanf("%i",&n);
        for (int i=0; i<n; i++){
            printf("Прiзвище: ");
            scanf("%s",pr);      
            printf("Марка: ");
            scanf("%s",m);     
            printf("Колiр: ");
            scanf("%s",k);      

            printf("Номер (чотиризначне число): ");
            scanf("%d",&no);

            printf("Введено: %s\n%s\n%s\n%d\n",pr,m,k,no);
            fprintf(A,"%s\n%s\n%s\n%d\n",pr,m,k,no);
        }
    }
    fclose(A);

    A = fopen("car.txt","r+");

    if (A!= NULL) {
        printf("Бiлi жигулi з номером, який починається на 45 :\n");
        while(fscanf(A,"%s\n%s\n%s\n%d\n",pr,m,k,&no) == 4)
        {
            if (strcmp(m,"жигулі") == 0 &&
                strcmp(k,"білий") == 0  &&
                no/100 == 45)
            {
                printf("%s\n%s\n%s\n%d\n", pr, m, k, no);
                break;
            }
        }
        fclose(A);
    }
}

17

Re: Допоможіть з Файлами на С

Якщо знову все не так, просто напишіть "-"

18

Re: Допоможіть з Файлами на С

1. ви пишете в cars.txt, а читаєте з car.txt
2. я не знаю, чому так, але

if (strcmp(m,"жигулі") == 0 &&
                strcmp(k,"білий") == 0  && ...

всередині if не робе, але ось так робе

            int v0 = strcmp(m, "жигуль");
            int v1 = strcmp(k, "білий");
            if (v0 == 0 && v1 == 0 && no / 100 == 45)
            {
                printf("%s\n%s\n%s\n%d\n", pr, m, k, no);
                break;
            }

19

Re: Допоможіть з Файлами на С

Я, якщо чесно, то не вірю що ви це написали, але це вже більше схоже на програму. Я вам підкажу, якщо ви зробите програму схожу на програму, тобто потурбуєтеся про користувача, бо зараз видно, що програміст про нього забув.

printf("Номер (чотиризначне число): ");

Скажіть користувачеві, якщо номер не чотиризначний, що він помилився та дайте йому ще раз можливість ввести правильне число.

    fclose(A);

У випадку, якщо файл не відкрився, ця функція призведе до крешу програми. Самі подумайте в якому з двох випадків ви неправильно її розмістили.
Скажіть користувачеві, якщо файл не відкрився(як на читання, так на запис), що з відкриттям файлу є якісь проблеми та заверште програму дрстроково.
Якщо білі жигулі не знайдено, то скажіть про це користувачеві.

20

Re: Допоможіть з Файлами на С

І так, якщо користувач увів порожній рядок, то скажіть йому про це і дайте йому можливість ще раз увести той рядок.