我在尝试通过代码获取用户输入时遇到一个奇怪的问题。我很确定问题不在于代码,而是与操作系统有关,例如标准输入流(stdin
)或类似的东西,但因为我没有另一台具有类似操作系统设置的机器(如现在几乎不可能找到 SCO 机器),我希望有一些编程解决方法来解决这个问题。我的程序从用户读取以 '\n'
结尾的字母数字字符流。
但无论我如何尝试通过不同的方式实现这一点,它只接受最初的 256 个字符。最初我怀疑问题出在 fgets
函数上,但是当我尝试使用 fgets
从文件中读取相同的值时,它按预期工作。
方法一:
main()
{
char szInLine[999];
memset(szInLine, 0, sizeof(szInLine));
fprintf(stdout, "\nPlease enter the encrypted value:\n");
if (fgets(szInLine, 997, stdin) == NULL)
return(1);
fprintf(stdout, "Encrypted data string contains %i characters: %s\n",
strlen(szInLine), szInLine);
}
方法 2:
while(ch = getc(stdin)) != EOF)
{
if((*szInLine++ = ch) == '\n')
{
break;
}
}
*szInLine = '\0';
fprintf(stdout, "Encrypted data string contains %i characters: %s\n", strlen(szInLine), szInLine);
两种情况的输出:“加密数据字符串包含 256 个字符:abcde.....
我已经尝试过但没有成功的其他方法包括更改保存值的缓冲区的数据类型(从字符串到unsigned long
)、动态为缓冲区分配内存、设置stdin
作为无缓冲等
操作系统环境: SCO Unix,32位 编译器: 抄送
最佳答案
请参阅 SCO 网站上的 ioctl() 和 stty() 手册页。您应该能够通过测试终端与重定向来检索设置中的差异。
关于c - 在 SCO Unix OS 中获取用户输入时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48009023/