循环打印时出现分段故障

Segmentation fault when loop printing

本文关键字:分段 故障 打印 循环      更新时间:2023-10-16

我正试图创建一个简单的投票系统,通过循环使用makeGraph函数为每个投票打印一个星号,可以非常简单地获取结果并绘制图表。当它运行时,它接受输入并一直工作到makeGraph函数运行为止。它打印出数千个完全未格式化的星号,然后以"分段错误"结束

#include <iostream>
#include <string>
using namespace std;
string makeGraph(int val)
{
    int i;
    for (i = 0; i < val; i++)
    {
        cout << "*";
    }
}
int main()
{
    string title;
    cout << "Enter a title: n";
    cin >> title;
    int vote;
    int vote1, vote2, vote3 = 0;
    do
    {
        cout << "Enter vote option: 1, 2, or 3.n";
        cin >> vote;
        if (vote == 1)
        {
            vote1++;
        }
        else if (vote == 2)
        {
            vote2++;
        }
        else if (vote == 3)
        {
            vote3++;
        }
    } while(vote != 0);
    cout << title << "n";
    cout << "Option 1: " << makeGraph(vote1) << "n";
    cout << "Option 2: " << makeGraph(vote2) << "n";
    cout << "Option 3: " << makeGraph(vote3) << "n";
}

函数makeGraph表示将返回string

string makeGraph(int val)

但没有return值。你所做的就是写信给cout

这意味着这将不起作用

cout << "Option 1: " << makeGraph(vote1) << "n";

因为函数没有将任何字符串值传递到输出流中。

我建议更改makeGraph函数如下。

string makeGraph (int val)
{
    string graph = "";
    for (int i = 0; i < val; ++i)
    {
        graph += "*";   // Concatenate to a single string
    }
    return graph;
}