无法读取C中的输入行

时间:2014-02-07 07:08:52

标签: c

对于一个愚蠢的问题感到抱歉,但这真的开始让我烦恼。

我需要从控制台获取一行输入。这是代码的相关片段:

int number_read=0;
char line[80];

printf("Enter register address: ");
number_read = scanf("%s\n", line);
printf("number of characters entered: %d; characters entered: %s.\n", number_read, line);
if (number_read > 0) {
  <read some registers and display the results.>
}

它不起作用。打印“输入寄存器地址”行,光标停在行尾,当我按回车键时移动到下一行,但之后没有其他任何事情发生。我已经尝试用fscanf(stdin,...)替换scanf(),用fgets(stdin),获取,GNU的getline(),一个做同样事情的短函数,带诊断:

char *new_line, ch;
for(;;) {
  ch = fgetc(stdin);
  if(ch == EOF) break;
  if((*line++ = ch) == '\n') break;
  printf("Line so far: %s\n", line);
}
*line='\0';

我得到了所有人的同样回复。我包含了所有必需的标题。

我在Windows XP机器上,使用gcc 3.4.5(mingw)进行编译。

谁能看到我做错了什么?

4 个答案:

答案 0 :(得分:0)

在scanf中你应该使用%i代表一个int,所以试试

 scanf("%I", number_line);

答案 1 :(得分:0)

以下代码可行,

char buff_msg[1024];
while(1)
{
    if(fgets(buff_msg,1024, stdin) != NULL){
        printf("%s\n", buff_msg);

        memset(buff_msg, 0, 1024); // you will need this line
    }

}

你可以     根据自己的情况打破循环

答案 2 :(得分:0)

尝试read()它适用于MinGW替换

这个

number_read = scanf("%s\n", line);

还包括#include<unistd.h>

number_read = read(STDIN_FILENO, (void *)line,sizeof line);

答案 3 :(得分:0)

值scanf返回的不是要读取的元素数量中的字符串数(本例为meybe 1)。

使用%n获取所需数字。

scanf("%s%n", line, &number_read);
printf("number of characters entered: %d; characters entered: %s.\n", number_read, line);