【问题标题】:Input is ended with an end-of-file character (EOF) in C, C++ and Python在 C、C++ 和 Python 中,输入以文件结束符 (EOF) 结束
【发布时间】:2018-03-03 15:40:01
【问题描述】:

我几天前开始学习 Python 语言。我的 python 技能并不算太高。但无论我学到什么,我都想解决UVA Online Judge问题

当我尝试解决问题时272 TEX Quotes当用户输入由文件结尾给出时,我面临终止循环的问题。

在 python 中检查我的(100% 逻辑解决)代码(while 循环终止除外)

flag = True;

while True: #I want That loop is terminated when getting EOF
    txt = input()

    for var in txt:
        if var == '"':
            if flag:
                print("``", end='')
            else:
                print("''", end='')
            flag = not flag
        else:
            print(var, end='')

    print(end='\n')

C 中检查我接受的已解决代码,它是由 Ctrl + Z 给出的带有文件结尾的终止循环

#include <stdio.h>

int main()
{
    int flag = 1;
    char txt;

    while((txt = getchar()) != EOF){
        if(txt == '"'){
            if(flag)
                printf("``");
            else
                printf("''");

            flag = !flag;
        }else
            putchar(txt);
    }
    return 0;
}

另外,C++

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
    char txt;
    bool flag = true;

    while((txt = getchar()) != EOF){
        if(txt == '"'){
            if(flag)
                cout << "``";
            else
                cout << "''";

            flag = !flag;
        }else
            cout << txt;
    }
    return 0;
}

【问题讨论】:

  • int txt 否则 EOF 处理混乱。
  • 当您向程序提供 EOF 时(例如,通过 ^D),input() 将引发 EOFError 并且程序将退出。有什么问题?
  • 没有其他的代码审查论坛吗?
  • 在 c 或 c++ 代码数据类型中可以使用 int txt 因为如果您编写以下代码,例如 printf("%d",getchar());然后,如果您从键盘 A 输入,您应该看到 65,这是 A 的 ASCII 值,或者如果您输入 CTRL-Z,则看到 -1。而且python没有给出数据类型,所以#coderredoc没有问题
  • 仅仅因为您将所有对printf 的调用替换为cout 并不意味着您真的在编写C++ 代码。现在来吧。

标签: python python-3.x eof


【解决方案1】:

EOF while input 引发 EOFError,因此您可以使用 try ... except 块与 break 语句:

flag = True;

while True: #I want That loop is terminated when getting EOF
    try:
        txt = input()

        for var in txt:
            if var == '"':
                if flag:
                    print("``", end='')
                else:
                    print("''", end='')
                flag = not flag
            else:
                print(var, end='')

        print(end='\n')
    except EOFError:
        break

【讨论】:

  • 非常感谢您的回答。而且我也会知道您解决的答案已被 UVA Online 法官接受。但有一件事告诉我,是否有可能像 c 或 c++ 那样在 while 循环中做这件事#Amaro_Vita
  • 你好,#Amaro_Vita 我还在等你。为了您的下一个更有效的解决答案,我在上面的评论中告诉我
猜你喜欢
  • 2021-08-02
  • 2015-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-08
  • 2016-08-01
  • 1970-01-01
相关资源
最近更新 更多