以下代码为supposed
,以便逐步提示用户提供信息。但是,当前它等待信息,然后显示提示以及提供的内容。任何人都可以解释为什么会这样吗?感谢。
contacts.h 文件
struct contacts {
int phone_number;
char first_name[11], last_name[11];
};
rolodex.c 文件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "contacts.h"
int main(int argc, char* argv[]) {
struct contacts* c = (struct contacts*) malloc(sizeof(struct contacts));
if (c == 0) {
return 1;
}
set_first_name(c);
set_last_name(c);
set_phone_number(c);
display_contact(c);
}
int set_first_name(struct contacts* c) {
puts("\nWhat is your first name? ");
gets(c->first_name);
return 0;
}
int set_last_name(struct contacts* c) {
puts("\nWhat is your last name? ");
gets(c->last_name);
return 0;
}
int set_phone_number(struct contacts* c) {
printf("\nWhat is your phone number? ");
scanf(" %d", &c->phone_number);
return 0;
}
int display_contact(struct contacts* c) {
printf("\nName: %s %s Number: %d", c->first_name, c->last_name, c->phone_number);
return 0;
}
答案 0 :(得分:7)
默认情况下,标准输出流是行缓冲的。这意味着在继续执行其他语句之前,不能保证看到短于整行的输出。
使用'\n'
或fflush(stdout)
结束输出。
实施例
已编辑:上一个示例使用了puts
已使用'\n'
int set_phone_number(struct contacts* c) {
printf("\nWhat is your phone number?\n"); /* \n at end of output */
scanf(" %d", &c->phone_number);
return 0;
}
或
int set_phone_number(struct contacts* c) {
printf("\nWhat is your phone number? ");
fflush(stdout); /* force output */
scanf(" %d", &c->phone_number);
return 0;
}
答案 1 :(得分:0)
Windows不支持线路抖动。默认情况下,流在控制台窗口和串行线路上是无缓冲的,并在其他地方完全缓冲。作为手动刷新的替代方法,可以使用setvbuf()禁用缓冲。