0

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

4 に答える 4

2

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);
}

C ++を使用している場合、ryansstackの答えは、はるかに優れた、より簡単で安全なソリューションであることに注意してください。

于 2009-07-17T23:42:25.127 に答える
1

文字(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に設定されている場合は...

于 2009-07-17T23:32:24.353 に答える
1

http://www.cplusplus.com/reference/iostream/istream/getline/ Ta da!

于 2009-07-17T23:38:25.337 に答える
0

すでにprintfを使用して「C」コードと「C++」を混合しているので、すべてをうまく読み取ってフォーマットするために、続行してscanfを使用してみませんか? scanf("%s", &mystring);

またはもちろん、すでに言われたこと.. getline

于 2009-07-18T00:47:03.487 に答える