|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
03.01.2007, 11:02 | #1 |
Пользователь
Регистрация: 27.12.2006
Сообщений: 10
|
Задача с файлами
Даны два файла. файл 1.txt и файл 2.txt создать файл 3.txt который содержит начальные совпадающие компаненты файла 1.txt и 2.txt.
Листинг программы приведен ниже. Вопрос почему программа не понимает fscanf(in,"%s\n",&st1); fscanf(im,"%s\n",&st2); if (st1==st2) fprintf(out,"%s\n",st1); else break; Подскажите кто знает. Пожалуйста #include <stdio.h> #include<conio.h> #include<iostream.h> #define Fname "D:/С++/495/3.txt" #define N 5 void main() { char fname[20]=Fname; char st1[10]; char st2[10]; FILE *in,*im,*out; char n; printf("\nsoderjimoe file%s\n",fname); puts("-------------------"); if ((in=fopen("1.txt","rt"))==NULL) {printf("error1\n"); getch(); return;} if ((im=fopen("2.txt","rt"))==NULL) {printf("error2\n"); getch(); return; } if ((out=fopen("3.txt","wt"))==NULL) {printf("error3\n"); getch(); return; } while ((!feof(in))&&(!feof(im))) { fscanf(in,"%s\n",&st1); fscanf(im,"%s\n",&st2); if (st1==st2) fprintf(out,"%s\n",st1); else break; } fclose(out); getch(); fclose(in); getch(); fclose(im); getch(); } |
04.01.2007, 21:52 | #2 |
Регистрация: 04.01.2007
Сообщений: 3
|
строки в С сравниваются при помощи функции strcmp (где насколько я понимаю происходит поэлементное сравнение), а так ты просто сравнивала адреса масивов st1 и st2, а они заведомо не одинаковы (поскольку массивы разные)
|
05.01.2007, 09:04 | #3 |
Delphi/C++/C#
Участник клуба
Регистрация: 29.10.2006
Сообщений: 1,972
|
а если так написать: if (&st1==&st2) ... тогда по идеи всё норм должно быть?
|
05.01.2007, 11:50 | #4 | |
Форумчанин
Регистрация: 10.11.2006
Сообщений: 189
|
Вот, немного изменил, теперь сравнивает по strcmp:
Код:
Цитата:
Последний раз редактировалось Umen; 05.01.2007 в 11:55. |
|
05.01.2007, 20:23 | #5 |
Регистрация: 04.01.2007
Сообщений: 3
|
if (&st1==&st2)
не будет работать поскольку происходит сравнение лиш адресов строк (тоже что и в предыдущем варианте), не будет работать даже вариант if (*st1==*st2), хотя здесь будет происходить сравнение первых символов строк. Строки в С обязательно сравниваются поэлементно (либо циклом cамому писать или при помощи функции strcmp, что конечно предпочтительней), Umen написал что-то на подобие необходимого кода. Хоть как по мне, если пользуетесь С++ лучше использовать std::string, там все просто: создали строку и сравниваете при помощи оператора ==. Функция strcmp(st1, st2) возвращает -1 если st1<st2, 0 если st1==st2 и 1 если st1>st2 (сравнение строк проиходит лексиграфическое, подобно до того как слова в словаре размещаются). Поэтому при помощи функции strcmp можно даже сортировать строки. Последний раз редактировалось fresh; 05.01.2007 в 20:29. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
задача на работу с файлами и строками | MiH@N | Помощь студентам | 8 | 24.06.2008 00:44 |
Проблемы с Ini-файлами | Азазель | Общие вопросы Delphi | 6 | 08.09.2007 19:24 |
Задача с текстовыми файлами | SpeedMaster | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 02.04.2007 15:43 |