Как я могу прочитать ввод с клавиатуры на строки символов? (C ++) - PullRequest
0 голосов
/ 18 июля 2009

getc (stdin) считывает ввод с клавиатуры в целые числа, но что, если я хочу прочитать ввод с клавиатуры в символьные строки?

#include "stdafx.h"
#include "string.h"
#include "stdio.h"
void CharReadWrite(FILE *fin);
FILE *fptr2;

int _tmain(int argc, _TCHAR* argv[])
{   

    char alpha= getc(stdin);
    char filename=alpha;
    if (fopen_s( &fptr2, filename, "r" ) != 0 )
      printf( "File stream %s was not opened\n", filename );
    else
     printf( "The file %s was opened\n", filename );
   CharReadWrite(fptr2);
   fclose(fptr2);
   return 0;
}
void CharReadWrite(FILE *fin){
    int c;
    while ((c=fgetc(fin)) !=EOF) {
        putchar(c);}
}

Ответы [ 4 ]

2 голосов
/ 18 июля 2009

Продолжая тему getc, вы можете использовать fgets для чтения строки ввода в буфер символов.

Е.Г.

char buffer[1024];
char *line = fgets(buffer, sizeof(buffer), stdin);
if( !line ) {
  if( feof(stdin) ) {
      printf("end of file\n");
  } else if( ferror(stdin) ) {
      printf("An error occurerd\n");
      exit(0);
  }
} else {
  printf("You entered: %s", line);
}

Обратите внимание, что ответ ryansstack - намного лучшее, более простое и безопасное решение, если вы используете C ++.

1 голос
/ 18 июля 2009
1 голос
/ 18 июля 2009

Символ (ASCII) - это просто 8-разрядное целое число без знака, т.е. может иметь значение от 0 до 255. Если вы посмотрите на таблицу ASCII, то увидите, как целочисленные значения отображаются в символы. Но в целом вы можете просто переключаться между типами, например:

int chInt = getc(stdin);
char ch = chInt;

// more simple
char ch = getc(stdin);

// to be explicit
char ch = static_cast<char>(getc(stdin));

Редактировать: Если вы используете getc для чтения имени файла, вы можете сделать следующее:

char buf[255];
int c;
int i=0;
while (1)
{
    c = getc(stdin);
    if ( c=='\n' || c==EOF )
        break;
    buf[i++] = c;
}
buf[i] = 0;

Это довольно низкоуровневый способ чтения ввода символов, другие ответы дают более высокий уровень / более безопасные методы, но опять же, если вы настроены на getc ...

0 голосов
/ 18 июля 2009

Поскольку вы уже смешиваете код "C" с "C ++" с помощью printf, почему бы не продолжить и использовать scanf scanf("%s", &mystring); для того, чтобы все это хорошо читать и форматировать?

Или, конечно, то, что уже было сказано .. getline

...