对于一个愚蠢的问题感到抱歉,但这真的开始让我烦恼。
我需要从控制台获取一行输入。这是代码的相关片段:
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)进行编译。
谁能看到我做错了什么?
答案 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);