在SCO Unix OS中获取用户输入时出现的问题

问题描述 投票:0回答:1

在尝试通过我的代码获取用户输入时,我遇到了一个奇怪的问题。我很确定问题不在于代码,而是与标准输入流(stdin)或类似的操作系统有关,但是因为我没有其他具有类似操作系统设置的机器(因为实际上不可能找到SCO)现在的机器),我希望有一些程序化的解决方法来解决这个问题。我的程序从'\n'终止的用户读取一个字母数字字符流。

但无论我如何尝试通过不同的方式实现这一点,它只接受最初的256个字符。最初我怀疑问题是fgets函数,但是当我使用fgets尝试从文件读取相同的值时,它按预期工作。

方法1:

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设置为无缓冲的e.t.c.

操作系统环境:SCO Unix,32位编译器:CC

c unix cc sco-unix
1个回答
1
投票

请参阅SCO网站上的ioctl()和stty()手册页。您应该能够通过测试终端与重定向来检索设置中的差异。

© www.soinside.com 2019 - 2024. All rights reserved.