如何阅读直到换行

时间:2015-02-25 07:13:07

标签: c getchar

所以我觉得我并不是非常理解getchar()功能......我认为代码会做的是,如果碰巧有一个空间,那么它就会#34;吃"具有getchar()功能的空间。如果碰巧没有" p"在输入中(如在下午1:30),它将只是保持"吃"输入,直到只留下'\n'。此时它将结束while循环。但无论如何,这里的代码是:

int main(void)
{
    int hour, min;
    char ch;

    printf("Enter a 12-hour time: ");
    scanf("%d : %d", &hour, &min);

    while ((ch = getchar()) != '\n')
    {
        if (toupper(ch) == 'P')
        {   hour += 12; }

    getchar();

    }

    printf("24-hour time: %d:%d", hour, min);
    return 0;
}

2 个答案:

答案 0 :(得分:1)

您可能会在getchar()循环中额外调用while,这可能会干扰您的逻辑。去掉它。你只需要:

while ((ch = getchar()) != '\n')
{
   if (toupper(ch) == 'P')
   {
      hour += 12;
   }
}

要使其清晰,请将ch的类型从char更改为int,因为getchar()的返回类型为int并检查{{1}对抗EOF也是。

ch

答案 1 :(得分:1)

getchar()用于从标准输入读取char。在这里,您已经阅读了scanf()的用户输入。所以你的代码可能是:

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

int main(void)
{
    int hour, min;
    char ch;

    printf("Enter a 12-hour time: ");
    char fmt[3];
    scanf("%d : %d %s", &hour, &min, fmt);

    if (strcmp(fmt, "pm") == 0) {
       hour += 12;
    }
    printf("24-hour time: %d:%d", hour, min);
    return 0;
}