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);}
}
答案 0 :(得分:2)
继续使用getc的主题,您可以使用fgets
将一行输入读入字符缓冲区。
E.g。
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的答案是一个更好,更简单,更安全的解决方案。
答案 1 :(得分: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 ......
答案 2 :(得分:1)
答案 3 :(得分:0)