C++:使用 fgets() 读取字符输入时出错
C++: error in reading character input using fgets()
我已经尝试了使用 fgets() 的简单代码,因为不再使用 gets() 并且不知道从键盘读取字符输入有什么更好的方法。
我的代码:
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
char a;
fgets(a, 100, stdin);
cout<<a;
return 0;
}
我收到这个错误:
cpp:13:20: error: invalid conversion from 'char' to 'char*' [-fpermissive]
fgets(a, 100, stdin);
^
In file included from /usr/include/c++/7.2.0/cstdio:42:0,
from /usr/include/c++/7.2.0/ext/string_conversions.h:43,
from /usr/include/c++/7.2.0/bits/basic_string.h:6159,
from /usr/include/c++/7.2.0/string:52,
from /usr/include/c++/7.2.0/bits/locale_classes.h:40,
from /usr/include/c++/7.2.0/bits/ios_base.h:41,
from /usr/include/c++/7.2.0/ios:42,
from /usr/include/c++/7.2.0/ostream:38,
from /usr/include/c++/7.2.0/iostream:39,
from jdoodle.cpp:1:
/usr/include/stdio.h:564:14: note: initializing argument 1 of 'char* fgets(char*, int, FILE*)'
extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
^~~~~
那么,我试过了
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
char *a;
fgets(a, 100, stdin);
cout<<a;
return 0;
}
但是又发生了一个错误。
如果有人能提供比使用 fgets() 更好的方法或解决上述问题,我们将不胜感激。
您需要取消引用 a
char a[100];
fgets(&a, 100, stdin);
cout << a << endl;
return 0;
fgets 的定义在第一个参数中有指针。当您尝试使用
char a;
1个字符自动分配space。
当您使用
char *a;
您必须将 space 分配给 malloc
您使用的 char *fgets(char *str, int n, FILE *stream)
有误。
它旨在从文件中读取多个字符,实际上最多 n-1
个字符,最后一个字符将是空终止符。
您可以使用 int getc(FILE *stream)
来读取单个字符,例如:
int a;
if((a = getc(stdin)) != EOF) {
// use a
char c = a; // convert to char explicitly
}
当你使用 C++ 时,更好的方法是使用 cin 流:
char a;
// formatted read(skips whitespace)
cin >> a;
// non-formated read
a = cin.get();
并且不要忘记在每次读取后检查操作是否成功:
if(cin) {
// success -> stream is ok
} else {
// handle read error
}
如果要读取多个字符:
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
char a[100]; // allocate static buffer
fgets(a, 100, stdin); // read in the buffer
cout << a;
return 0;
}
另外c++的方式是:
#include <iostream>
#include <string>
using namespace std;
int main() {
string s; // string that automatically manages memory
cin >> s; // reads non-whitespace sequence of characters
cout << s;
return 0;
}
另一种选择是读取一行字符,最多 \n
包括空格。
#include <iostream>
#include <string>
using namespace std;
int main () {
string s;
getline(cin, s);
cout << s;
return 0;
}
变量a是一个未赋值的字符指针。将 'a' 声明为固定长度数组:
炭[100];
要么
使用 malloc:
分配内存给 'a'
a=(char*)malloc( 100*sizeof(char) );
我已经尝试了使用 fgets() 的简单代码,因为不再使用 gets() 并且不知道从键盘读取字符输入有什么更好的方法。 我的代码:
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
char a;
fgets(a, 100, stdin);
cout<<a;
return 0;
}
我收到这个错误:
cpp:13:20: error: invalid conversion from 'char' to 'char*' [-fpermissive]
fgets(a, 100, stdin);
^
In file included from /usr/include/c++/7.2.0/cstdio:42:0,
from /usr/include/c++/7.2.0/ext/string_conversions.h:43,
from /usr/include/c++/7.2.0/bits/basic_string.h:6159,
from /usr/include/c++/7.2.0/string:52,
from /usr/include/c++/7.2.0/bits/locale_classes.h:40,
from /usr/include/c++/7.2.0/bits/ios_base.h:41,
from /usr/include/c++/7.2.0/ios:42,
from /usr/include/c++/7.2.0/ostream:38,
from /usr/include/c++/7.2.0/iostream:39,
from jdoodle.cpp:1:
/usr/include/stdio.h:564:14: note: initializing argument 1 of 'char* fgets(char*, int, FILE*)'
extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
^~~~~
那么,我试过了
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
char *a;
fgets(a, 100, stdin);
cout<<a;
return 0;
}
但是又发生了一个错误。
如果有人能提供比使用 fgets() 更好的方法或解决上述问题,我们将不胜感激。
您需要取消引用 a
char a[100];
fgets(&a, 100, stdin);
cout << a << endl;
return 0;
fgets 的定义在第一个参数中有指针。当您尝试使用
char a;
1个字符自动分配space。
当您使用
char *a;
您必须将 space 分配给 malloc
您使用的 char *fgets(char *str, int n, FILE *stream)
有误。
它旨在从文件中读取多个字符,实际上最多 n-1
个字符,最后一个字符将是空终止符。
您可以使用 int getc(FILE *stream)
来读取单个字符,例如:
int a;
if((a = getc(stdin)) != EOF) {
// use a
char c = a; // convert to char explicitly
}
当你使用 C++ 时,更好的方法是使用 cin 流:
char a;
// formatted read(skips whitespace)
cin >> a;
// non-formated read
a = cin.get();
并且不要忘记在每次读取后检查操作是否成功:
if(cin) {
// success -> stream is ok
} else {
// handle read error
}
如果要读取多个字符:
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
char a[100]; // allocate static buffer
fgets(a, 100, stdin); // read in the buffer
cout << a;
return 0;
}
另外c++的方式是:
#include <iostream>
#include <string>
using namespace std;
int main() {
string s; // string that automatically manages memory
cin >> s; // reads non-whitespace sequence of characters
cout << s;
return 0;
}
另一种选择是读取一行字符,最多 \n
包括空格。
#include <iostream>
#include <string>
using namespace std;
int main () {
string s;
getline(cin, s);
cout << s;
return 0;
}
变量a是一个未赋值的字符指针。将 'a' 声明为固定长度数组: 炭[100]; 要么 使用 malloc:
分配内存给 'a'a=(char*)malloc( 100*sizeof(char) );