在C中键入时自动添加点(。)

时间:2015-04-11 15:01:56

标签: c date scanf

我想知道是否有一些类似于scanf的功能允许在c中自定义输入。 我想要做的是当用户输入想要的日期时,每隔几个字符添加一个点。当用户想要确认他的输入时,他应该按回车键,并且该变量被保存在某处。

示例:用户正在输入11.04.2015。

当他输入11时,在控制台上添加了dot。在4和2015之后也是如此。

非常感谢您的回答。该平台是Windows

2 个答案:

答案 0 :(得分:2)

快速解决方案,此处理日期格式为3块。 这在两个int之后添加.

#include<stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char ch;
    char input[16];
    char *p;
    int i = 0;
    int part = 0;
    memset(input, 0, sizeof(input));

    p = input;
    system("stty raw -echo");
    while(1)
    {
        ch = getchar();
        if(ch == '~'){//terminate or come out of raw mode on "~" pressed
            system("stty cooked sane");
            return 0;
        }
        if (ch >= '0' && ch <= '9') {
            *p++ = ch;
            if (i++ == 1) {
                if (part++ == 2) {
                    printf("\rdone: %s\n", input);
                    /* Finish your prog here*/
                    break;
                }
                *p++ = '.';
                i = 0;
            }
        } else if (ch == '.') {
            *p++ = ch;
            i = 0;
            part++;
        }
        printf("\r%s", input);
    }
    system("stty cooked sane");
    return 0;
}

答案 1 :(得分:0)

这里有意的偏离主题的建议:不要以用户的方式进入。实现一个解析任何看起来像日期的函数,但,永远不会自动放点,也不会自动分离d / m / y字段。如果您这样做,用户将无法复制粘贴日期并输入快捷方式(例如1.1.15),并且通常会对这样无能的ui设计师感到愤怒。第二,做得对(退格如何?非数字?逗号?点?)导致完全愚蠢的代码复杂性。除非你有严格要求,否则你只是把时间花在烦扰你的客户身上。

如果你有,对不起噪音!