我真的很绝望,试图找出如何读取值为-1/255的char,因为对于大多数函数来说这意味着EOF。例如,如果我从扩展ASCII中输入从低到高(十进制值)的所有字符,我最终得到-1/255这是EOF,所以我不会把它带到数组。我创建了一些小代码来表达我的问题。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define BUFFERSIZE 1024
int main(void){
char c;
unsigned int *array = (unsigned int*)calloc(BUFFERSIZE,sizeof(unsigned int)), i = 0;
while (1){
c = fgetc(stdin);
if (c == EOF)
break;
array[i] = c;
i++;
}
array[i] = 0;
unsigned char *string = (unsigned char *)malloc(i);
for(int j = 0;j < i;j++)
string[j] = array[j];
free(array);
//working with "string"
return 0;
}
我可以模式
if (c == EOF)
break;
像这样
c = fgetc(stdin);
array[i] = c;
i++;
if (c == EOF)
break;
但是当然,程序也会读取用户从键盘输入的控制字符(例如Ctrl + D - Linux)。我尝试打开stdin作为二进制文件,但我发现posix系统将所有文件作为二进制文件。我正在使用QT,GCC和Ubuntu。我尝试了fread,read,fgets但我最终也是如此。简单地说,我需要读取我在stdin上输入的所有内容并将其放入char数组中,除非我输入控制字符(Ctrl + D)以结束读取。任何建议都表示赞赏。
答案 0 :(得分:2)
修改:正如@ TonyB的评论中所述,您不应将c
声明为char
,因为fgetc()
会返回int
},将其更改为int c;
应该可以将EOF
存储在c
中。
我没有看到您将c
声明为char c;
所以所有功劳归于@ TonyB。
原始答案:虽然问题已在评论中得到解决,但我添加了此答案的解决方案,我认为您感到困惑,EOF
不是一个字符,它是一个特殊的某些I / O函数返回的值,表示流的结束。
你永远不应该认为它的值是-1
,它通常是因为某个原因有一个宏,所以你应该总是依赖这些函数返回EOF
而不是{{1 }}
由于值-1
没有ascii表示,因此无法将其作为字符输入,但您可以解析输入字符串-1
,并在需要时将其转换为数字