c - 如何在c中正确格式化整数?

标签 c unix

假设我有一个包含多个姓名及其相应生日的文本文件,例如:

约翰·多伊 2 34
劳伦母鹿 3 4
艾伯特河格里夫顿 03 12

转换器程序将为学生创建用户名,例如:

jd0234
ld0304
arg0312

我遇到的问题是为奇数天数的 if/else 条件添加零。

按照我目前的程序,它会打印出:

jd234
ld34
arg0312

我知道有3种情况。

  1. 如果有 3 位数字,请添加一个零。
  2. 如果有 2 个数字,请添加两个零。
  3. 如果有 4 个数字,一切都很好。

我知道如何使用 printf("%02d, num) 相应地格式化字符串。虽然我不认为我的目的需要它,因为这是一个与另一个使用管道的程序一起工作的程序。

//      converter.c
//      

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

int main(void)
{
    char line[512];
while(!feof(stdin))
{
    if((fgets(line, sizeof(line), stdin) != 0))
    {
        char  name[16];
        char *dst = name;
        char *end = name + sizeof(name) - 1;
        char *src = line;
        while (*src != '\0')
        {
           char  c;
           while ((c = *src++) != '\0' && isspace(c)){}

           if (isalpha(c))
           {
               if (dst < end)
                   *dst++ = tolower(c);
               while ((c = *src++) != '\0' && !isspace(c)){}
           }
           else if (isdigit(c))
           {
                              //birthdays are evaluated here
               while (dst < end && isdigit(c))
               {
                    *dst++ = c;
                    c = *src++;
               }
           }
        }

        *dst = '\0';
        puts(name);
        fflush(stdout);
    }
}
return 0;
}

最佳答案

一旦你对字符串进行了标记,最后两个标记应该用 atoi 解析,然后你将有两个整数。这些可以用 sprintf(%02d, myInt) 打印。

关于c - 如何在c中正确格式化整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2307800/

相关文章:

shell - 在服务器上作为后台进程运行 java jar 文件

UNIX:将文件从子文件夹移动到另一个文件夹

c - 访问微 Controller 上寄存器的结构指针?

c - C中的静态变量如何在内存中持久化?

c - 抛出异常: Access violation writing location 0x00000000

bash - 如何在unix shell脚本中查找文件中字符串的位置

linux - 在 Linux 和 Perl 中列出文件夹的绝对路径

linux - 操作系统确定内核或某些用户程序的输入

c - 在 C 中重复输入数据的结构

c - 你如何验证用户在 C 中的输入?