LinuxForum.Fans
Тема

Помогите, пожалуйста! очень нужно! спасайте)

Автор: deleted_user 55 сообщений 9959 просмотров 🔒 закрыта
#46029
drBatty написал:
[quote=Hvzh]Ошибок в коде нет, все компилируется и работает

патч наложите:

text
$ diff t.c t_old.c 
79,80c79
<           int i;
<     for(i = 1; i < argc; i++)
---
>     for(int i = 1; i < argc; i++)

а то

text
t.c: В функции ‘main’
t.c:79: ошибка: ‘for’ loop initial declaration used outside C99 mode

кстати - ошибки на скрине - очепятки.
например stder с одной r, и т.д.

[/quote]
патч наложите:
это нада встовить или как?

#46030

а собирается криво, но работает как-то...

text
t.c: В функции ‘deldir’
t.c:50: предупреждение: format ‘%d’ expects type ‘int’, but argument 3 has type ‘long int’
t.c: В функции ‘main’
t.c:75: предупреждение: unused variable ‘topdir’

впрочем это мелочи...

#46031

Все ясно! Данный gcc использует ANSI C, а надо бы, как у всех нормальных людей, с99. Либо компилячить g++

#46033
Hvzh написал:
Все ясно! Данный gcc использует ANSI C, а надо бы, как у всех нормальных людей, с99. Либо компилячить g++

раскажи как это сделать в убунту, поподробней пожалйста

drBatty написал:
а собирается криво, но работает как-то...
text
t.c: В функции ‘deldir’
t.c:50: предупреждение: format ‘%d’ expects type ‘int’, but argument 3 has type ‘long int’
t.c: В функции ‘main’
t.c:75: предупреждение: unused variable ‘topdir’

впрочем это мелочи...

это ты все как там прописал?

#46035
niko97 написал:
патч наложите:
это нада встовить или как?

это надо сменить неправильную строчку №79
с

text
for(int i = 1; i < argc; i++)

на

text
int i;
for(i = 1; i < argc; i++)

у нас более жёсткие стандарты чем у Hvzh... и опечатки исправляйте.

niko97 написал:
это ты все как там прописал?

конечно. это не ошибки, а предупреждения

niko97 написал:
как это сделать в убунту

без разницы где. в Windows так-же.

#46036
drBatty написал:
[quote=niko97]патч наложите:
это нада встовить или как?

это надо сменить неправильную строчку №79
с

text
for(int i = 1; i < argc; i++)

на

text
int i;
for(i = 1; i < argc; i++)

у нас более жёсткие стандарты чем у Hvzh... и опечатки исправляйте.

niko97 написал:
это ты все как там прописал?

конечно. это не ошибки, а предупреждения
ну ты можешь мне скинуть то что написал ты?

niko97 написал:
как это сделать в убунту

без разницы где. в Windows так-же.

[/quote]
ну ты можешь мне скинуть то что написал ты?

#46037
Hvzh написал:
Либо компилячить g++

не надо... это всё же C без плюсов. (хотя и работает)

#46038
niko97 написал:
[quote=drBatty][quote=niko97]патч наложите:
это нада встовить или как?

это надо сменить неправильную строчку №79
с

text
for(int i = 1; i < argc; i++)

на

text
int i;
for(i = 1; i < argc; i++)

у нас более жёсткие стандарты чем у Hvzh... и опечатки исправляйте.

niko97 написал:
это ты все как там прописал?

конечно. это не ошибки, а предупреждения
ну ты можешь мне скинуть то что написал ты?

niko97 написал:
как это сделать в убунту

без разницы где. в Windows так-же.

[/quote]
ну ты можешь мне скинуть то что написал ты?[/quote]
вот это "а надо бы, как у всех нормальных людей, с99. Либо компилячить g++" как сделать?

#46039

я этого не писал, только чуть исправил.

text
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <dirent.h>

long FileSize(char *file) { long curpos, length; FILE *stream = fopen(file, "r");

curpos = ftell(stream); fseek(stream, 0L, SEEK_END); length = ftell(stream); fseek(stream, curpos, SEEK_SET); return length; }

void deldir(char *dir, int depth) { DIR *dp; struct dirent *entry; struct stat statbuf; long filesize = 0; if((dp = opendir(dir)) == NULL) { fprintf(stderr, "Can not open directory: %s\n", dir); return; } chdir(dir); while((entry = readdir(dp)) != NULL) { lstat(entry->d_name, &statbuf); if(S_ISDIR(statbuf.st_mode)) { if(strcmp(".", entry->d_name) == 0 || strcmp("..", entry->d_name) == 0) continue; deldir(entry->d_name, depth + 4); } else { if(S_ISBLK(statbuf.st_mode)||S_ISCHR(statbuf.st_mode)) continue; else { filesize = FileSize(entry->d_name); printf("\n File '%s' size: %d: Do you want to delete it (Y/N?)", entry->d_name, filesize); int ch = getchar(); if((ch == 'Y') || (ch == 'y')) { getchar(); unlink(entry->d_name); fflush(stdin); } else { chdir(".."); closedir(dp); return; } } } } chdir(".."); rmdir(dir); closedir(dp); }

int main (int argc, char **argv) { char topdir[] = "."; if(argc >= 2) { int i; for(i = 1; i < argc; i++) { deldir(argv[i], 0); } } return 0; }

#46040
drBatty написал:
я этого не писал, только чуть исправил.
text
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <dirent.h>

long FileSize(char *file) { long curpos, length; FILE *stream = fopen(file, "r");

curpos = ftell(stream); fseek(stream, 0L, SEEK_END); length = ftell(stream); fseek(stream, curpos, SEEK_SET); return length; }

void deldir(char *dir, int depth) { DIR *dp; struct dirent *entry; struct stat statbuf; long filesize = 0; if((dp = opendir(dir)) == NULL) { fprintf(stderr, "Can not open directory: %s\n", dir); return; } chdir(dir); while((entry = readdir(dp)) != NULL) { lstat(entry->d_name, &statbuf); if(S_ISDIR(statbuf.st_mode)) { if(strcmp(".", entry->d_name) == 0 || strcmp("..", entry->d_name) == 0) continue; deldir(entry->d_name, depth + 4); } else { if(S_ISBLK(statbuf.st_mode)||S_ISCHR(statbuf.st_mode)) continue; else { filesize = FileSize(entry->d_name); printf("\n File '%s' size: %d: Do you want to delete it (Y/N?)", entry->d_name, filesize); int ch = getchar(); if((ch == 'Y') || (ch == 'y')) { getchar(); unlink(entry->d_name); fflush(stdin); } else { chdir(".."); closedir(dp); return; } } } } chdir(".."); rmdir(dir); closedir(dp); }

int main (int argc, char **argv) { char topdir[] = "."; if(argc >= 2) { int i; for(i = 1; i < argc; i++) { deldir(argv[i], 0); } } return 0; }

и все работает? в убунту в ткстовом редакторе написал с .с?

#46048

drBatty,

Это вот это более жесткий стандарт???

text
int i;
for(i = 1; i < argc; i++)

Это устаревший давно ANSI C. Как это он в убунту-то пролез? Хотя, я давно был об этой ОС невысокого мнения

#46052
Hvzh написал:
Это вот это более жесткий стандарт???

угу, старый и жёсткий :) в слаке тоже такой по умолчанию.

niko97 написал:
и все работает?

фиг знает. что-то пишет...

#46054

drBatty,
Вообще-то да, это с какой стороны понимать слово "жесткий". Сейчас почитал c99, в какой-то степени он даже пожестче будет, чес c89 и ANSI

#46072

прочитал.
похоже на развод какой-то...

#46077

Termo, согласен, особенно после переписки. Если и не развод, то простите, кхм.

Войдите или зарегистрируйтесь, чтобы ответить.