数字键盘[输入]不是C中的\ n?

时间:2011-05-22 21:55:08

标签: c macos keyboard stdin

我正在为一项大学任务开发一个小型C程序,我注意到我的代码中有一个奇怪的错误。我一般使用带有短键盘的iMac,但它的电池是扁平的,所以我插上了带数字键盘的标准USB键盘。

奇怪的是,如果我在我的数字键盘上按[Enter],它似乎执行常规[Enter}键的操作,但是\ n我试图在我用来读取键盘输入的stdin函数,当我使用数字键盘的[Enter]键时不起作用。

跆拳道?

这是我的函数,它读取用户输入:

/* This is my implementation of a stdin "scanner" function which reads
 * on a per character basis until the the termination signals are found
 * and indescriminately discarding all characters in the input in excess
 * of the supplied (limit) parameter.  Eliminates the problem of 'left-over'
 * characters 'polluting' future stdin reads.
 */
int readStdin(int limit, char *buffer) 
{
   char c;
   int i = 0;
   int read = FALSE;
   while ((c = myfgetc(stdin)) != '\n' && c != '\0') {
      /* if the input string buffer has already reached it maximum
       limit, then abandon any other excess characters. */
      if (i <= limit) {
         *(buffer + i) = c;
         i++;
         read = TRUE;
      }
   }
   /* clear the remaining elements of the input buffer with a null character. */
   for (i = i; i < strlen(buffer); i++) {
      *(buffer + i) = '\0';
   }
   return read;
}

/* This function used to wrap the standard fgetc so that I can inject programmable
 * values into the stream to test my readStdin functions.
 */
int myfgetc (FILE *fin) {
   if (fakeStdIn == NULL || *fakeStdIn == '\0')
      return fgetc (fin);
   return *fakeStdIn++;
}

注意:myfgetc和后续的*fakeStdIn是我可以单独测试我的代码并以编程方式将项目“注入”stdin流的方式的一部分,正如有人在此问题上建议的那样:{{ 3}}。

3 个答案:

答案 0 :(得分:1)

这个小小的测试得到了什么结果?

#include <stdio.h>
int main(int argc, char* argv[]) {
    int c;
    while((c=getchar()) != EOF) {
        printf("%d\n", c);
    }
    return 0;
}

答案 1 :(得分:0)

很可能在Mac上,你得到\r\n,而不只是\n

答案 2 :(得分:0)

事实证明这是Mac OSX的事情。我和其他Mac用户交谈过,他们遇到了同样的问题。从来没有找到修复,因为可能根本就不存在。在Solaris机器上不会出现这个问题,因为这是运行代码的操作系统,我想这并不重要。

我将自己回答这个答案,即它只是其中一个OSX“怪癖”并且完成了它。