0

我在显示注册表中输入的数据时遇到问题。我编写的以下程序仅显示最后一个寄存器。( ziua=day , inregistrari=registers, data=date (ex. 03.02.2013))

#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
int main()
{
    char ziua[30],data[30],inregistrari[90];
    int n,i;
    cout<<"INPUT DATA"<<endl;
    system("Pause");
    cout<<"\nEnter the day in which you want to perform the register: ";
    cin>>ziua;
    cout<<"\nDATE:";
    cin>>data;
    cout<<"\nEnter the number of registers you wanna perfom for the day "<<ziua<<":";
    cin>>n;
    for(i=1;i<=n;i++)
    {
        cout<<"\nRegister "<<i<<":";
        gets(inregistrari);
    }
    cout<<"The data for the day of "<<ziua<<" are the following: ";
    cout<<"\nDATE: "<<data;
    for(i=1;i<=n;i++)
    cout<<"\n"<<inregistrari;
    getch();
}
4

1 回答 1

3
  1. 您正在使用 C++ 编程,您应该使用std::string而不是 C 样式的字符串。
  2. inregistrari[90]是一个字符数组,足以容纳 1 个最大长度为 89char秒的字符串(+ 终止字符),但您的循环似乎将其视为一个数组或字符串(尽管在这种情况下gets(inregistrari);继续重写相同的字符串)
  3. 函数gets通常已被弃用,在 C 中您应该fgets改用(但这是 C++,因此这里真正的解决方案应该是 using std::getline
  4. 而不是 C 样式的数组,请std::vector<std::string>在此处使用。
  5. 打印inregistrariis 在for循环体中,但是这个循环的每次迭代都做同样的事情(打印不依赖i于任何方式)
  6. using namespace std;在全球范围内是一种不好的做法
  7. 您不必在函数开头声明所有变量,这在旧 ANSI C 中是必需的(大约 20 年前)

这是一个示例:

#include <iostream>
#include <string>
#include <vector>

int main()
{
    std::string day, date;
    int registerCount;

    std::cout << "INPUT DATA"
              << std::endl << std::endl
              << "Enter the day in which you want to perform the register: "
              << std::endl;
    std::cin >> day;
    std::cout << "DATE:" << std::endl;
    std::cin >> date;
    std::cout << "Enter the number of registers you wanna perfom for the day "
              << day << ":" << std::endl;
    std::cin >> registerCount;

    std::vector<std::string> registers(registerCount);
    for (int i = 0; i < registerCount; ++i)
    {
        std::cout << "Register " << i << ":" << std::endl;
        std::getline(std::cin, registers[i]);
    }

    std::cout << "The data for the day of " << day << " are the following: "
              << std::endl;

    std::cout << "DATE: " << date << std::endl;
    for (int i = 0; i < registerCount; ++i)
        std::cout << registers[i] << std::endl;
}

请注意,您可能会包装std::getline(std::cin, registers[i])withif语句并检查是否返回了有效的流对象,如果是空行,它将读取空字符串,因此您还可以确保!registers[i].empty().

于 2013-09-04T13:49:05.453 回答