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

请注意,ryansstack 的答案是一个更好、更简单、更安全的解决方案,因为您使用的是 C++。

于 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/ 哒哒!

于 2009-07-17T23:38:25.337 回答
0

既然您已经使用 printf 将“C”代码与“C++”混合在一起,为什么不继续使用scanf scanf("%s", &mystring);来很好地阅读和格式化它呢?

或者当然已经说过了.. getline

于 2009-07-18T00:47:03.487 回答