我正在尝试将getchar的使用转换为fgets但是,当使用getchar时,整个代码都不起作用。
//fgets(line, sizeof(line), stdin);
while(fgets(line, sizeof(line), stdin))
{
portNum[sizeof(line)] = (char)line;
}
while((c = getchar()) != '\n')
{
portNum[num++] = c;
}
portNum[num] = '\0';
如何让这两个功能正常工作?
答案 0 :(得分:1)
您使用fgets
是错误的。
fgets
从流中读取字符并将它们作为C字符串存储到str中,直到读取(num-1)个字符或者到达换行符或文件结尾为止,以先发生者为准。 / p>
在您的情况下,fgets
会读取所有字符,直到遇到换行符。
另外,参数用法是错误的。
char * fgets(char * str,int num,FILE * stream);
str =>指向复制字符串读取的字符数组的指针。
num =>要复制到str的最大字符数(包括 终止空字符)。
stream =>指向标识输入流的FILE对象的指针。 stdin可以用作从标准输入读取的参数。
有关详细信息,请参阅fgets
文档。
答案 1 :(得分:1)
OP的fgets()
用法不明确,portNum[sizeof(line)] = (char)line;
肯定是错误的。
相反:如何使下面的getchar()
代码更fgets()
- 如:
// assumed missing code
#define N 100
int c;
char portNum[N];
size_t num = 0;
// size and EOF detection added (which should have been there)
while(num + 1 < sizeof portnum && (c = getchar()) != '\n' && c != EOF) {
portNum[num++] = c;
}
portNum[num] = '\0';
// assumed missing code
if (c == EOF && num == 0) Handle_EndOfFile_or_InputError();
else ...
可以使用fgets()
代码
#define N 100
char portNum[N+1]; // 1 larger for the \n
if (fgets(portNum, sizeof portNum, stdin)) {
// lop off potential trailing \n
portNum[strcspn(portNum, "\n")] = '\0';
...
} else {
Handle_EndOfFile_or_InputError();
}