Автор: KernelPanic (05.03.2012 в 17:01)
Извините, что в тему залез - просто интересно стало тут...
Попробовал набросать быстренько рабочую программу подсчета символов, без каких либо проверок и другой мути... Но не тут то было.
Вначале попробовал так:
#include <stdio.h>
int main (int argc, char *argv[])
{
FILE *in;
char *key;
int byte;
if (argc !=3) {
printf ("Usage: <input_file>\n");
return 1;
}
key=argv[1];
if ((in = fopen(argv[2], "rb")) != NULL) {
int x=0;
while ((byte = getc(in)) != EOF)
{
if (key == byte)
x++;
}
fclose(in);
printf ("%d", x);
}
return 0;
} |
Понимаю - ошибка в том, что нельзя сравнивать указатель и целое.
При компиляции даже ошибку выдает
24 C:\3.c [Warning] comparison between pointer and integer это понятно.
Вопрос - что происходит в данном случае, т.е. по какому алгоритму отрабатывает код?
Как это будет правильно?
Что будет, если объявление сделать так:
?
выдает при компиляции
[Warning] assignment makes integer from pointer without a cast
Что в этом случае не так?
Заработала такая конструкция:
#include <stdio.h>
int main (int argc, char *argv[])
{
FILE *in;
char key;
int byte;
if (argc !=2) {
printf ("Usage: <input_file>\n");
return 1;
}
printf ("vvedite iscomii simvol\n");
scanf ("%c", &key);
if ((in = fopen(argv[1], "rb")) != NULL) {
int x=0;
while ((byte = getc(in)) != EOF)
{
if (key == byte)
x++;
}
fclose(in);
printf ("%d", x);
}
return 0;
}
|
Но хотел то ввод по другому осуществить.