Форум С++

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

Автор: 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 это понятно.
Вопрос - что происходит в данном случае, т.е. по какому алгоритму отрабатывает код?
Как это будет правильно?
Что будет, если объявление сделать так:
  char key;
?
выдает при компиляции [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;
}

Но хотел то ввод по другому осуществить.


Ваше имя:

Пароль:

Цитировать

Используйте тэги для выделения текста:
Код: [code][/code]
Жирный: [b][/b]
Наклонный: [i][/i]
URL: [url][/url]

Сообщение:

Прикрепить: