帮助提示和存储信息

时间:2011-04-07 22:32:44

标签: c

以下代码为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;
}

2 个答案:

答案 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()禁用缓冲。