在用户不断输入之前如何运行程序?

Posted

技术标签:

【中文标题】在用户不断输入之前如何运行程序?【英文标题】:How to run a program until user keeps giving input? 【发布时间】:2019-03-16 12:54:12 【问题描述】:

Problem Statement

给定姓名和电话号码,组装一个电话簿,将朋友的姓名映射到他们各自的电话号码。然后,您将获得未知数量的姓名来查询您的电话簿。对于查询的每个姓名,将电话簿中的相关条目以“name=phoneNumber”的形式打印在新行上;如果未找到名称条目,则打印“未找到”。

输入格式:...

在电话簿条目的行之后,有未知数量的查询行。每行(查询)都包含一个要查找的内容,并且

您必须继续阅读行,直到没有更多输入为止。

我应该如何循环它直到没有更多的输入?

还有谁能告诉我这在 C++ 中是如何实现的?

这是我在 Python 3 中的代码:

n = int(input())
names = 
for foo in range(n):
    entry = input().split(' ')
    names[entry[0]] = entry[1]
while (1==1):
    check = input()
    if(names.get(check)!=None):
        print(check + '=' + names.get(check))
    else:
        print('Not Found')

它只是无限循环,因此会触发错误。

这是 C++ 代码:

#include<iostream>
#include<map>
#include<string>
using namespace std;

int main(void)

    map<string, string> phonebook;
    int n;
    cin >> n;
    string key, num;
    for(int i = 0; i < n; i++)
    
        cin >> key >> num;
        phonebook.insert(pair<string, string>(key, num));
    
    while (1 == 1)
    
        cin >> key;
        if(phonebook.count(key) > 0)
            cout << key << "=" << phonebook[key] << endl;
        else
            cout << "Not found" << endl;
    

【问题讨论】:

为了将来参考,请将您的问题限制在一个问题上。否则,您的问题可能会因为过于宽泛或不清楚而被关闭。谢谢。 @TrebuchetMS 那么我应该将它们作为两个单独的问题发布吗? 在发布两个(或其中一个或任何一个)问题之前,我会先做更多的研究。谷歌搜索“阅读行直到没有更多输入”并不太难,是吗? :-) 但是,是的,如果归根结底,最好发布两个单独的问题。 (或者考虑发布一个问题并尝试自己解决另一个问题。) 【参考方案1】:

我应该如何循环它直到没有更多的输入?

您对 while 循环的使用是合适的。要捕获并消除错误,您可以使用 try-except 块:

n = int(input())
names = 
for foo in range(n):
    entry = input().split(' ')
    names[entry[0]] = entry[1]

while True:     # (1 == 1) == True
    try:
        check = input()
    except EOFError:  # catch the error
        break       # exit the loop

    if(names.get(check)!=None):
        print(check + '=' + names.get(check))
    else:
        print('Not Found')

还有谁能告诉我这在 C++ 中是如何实现的?

嗯……奇怪的请求。我会把你指向std::getlinestd::map,让他们来说话。 :-)

【讨论】:

@harshit54 有一种方法可以做到不被捕获:how to read until eof from cin in C++. 很抱歉。我确实尝试用谷歌搜索这个完全相同的问题,但找不到任何答案。我会记得下次更彻底地搜索。我记得在使用文件流时使用 while(getline()) 读取直到 EndOfFile。我不知道它对输入流也有效。【参考方案2】:

这是正确的 C++ 代码:

#include<iostream>
#include<map>
#include<string>
using namespace std;

int main(void)

    map<string, string> phonebook;
    int n;
    cin >> n;
    string key, num;
    for(int i = 0; i < n; i++)
    
        cin >> key >> num;
        phonebook.insert(pair<string, string>(key, num));
    
    getline(cin, key);

    while(getline(cin, key))        //Loop runs while we are getting input.
    
        if(phonebook.count(key) > 0)
            cout << key << "=" << phonebook[key] << endl;
        else
            cout << "Not found" << endl;
    

【讨论】:

以上是关于在用户不断输入之前如何运行程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows XP 上注销之前运行我的程序?

如何在基于servlet的Web应用程序中运行后台任务?

应用关闭前的离子运行功能

PyQt5 如何在编译后更新资源文件?

使用 NSUserDefaults 如何在应用程序首次运行之前保存密钥

如何将用户输入作为按键,检测它,并使程序在Python中相应地运行?