大家好我在Visual C ++ 2013中打印字符串内容时遇到问题 如您所见,代码很简单:
#include <iostream>
#include <string>
#include <fstream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main()
{
ifstream file("d:\\t.txt");
if (file.is_open())
{
string a[5];
for (int i = 0; i < 5; ++i)
{
file >> a[i];
}
}
cout<< a;
system("pause");
}
我收到以下错误:
1>------ Rebuild All started: Project: Project3, Configuration: Debug Win32 ------
1> Source.cpp
1>c:\users\malatrab\documents\visual studio 2013\projects\project3\source.cpp(14): error C2065: 'a' : undeclared identifier
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========
所以请关于这个问题的任何想法。编译器无法识别字符串变量a。
答案 0 :(得分:2)
在您使用它的范围内没有任何名为a
的内容。
还要注意cout
不直接支持数组的输出(char
数组除外)。将这样的数组直接传递给cout
输出操作,它衰减到指向第一个项目。所以当你修复了主要问题时,你需要做一些循环来输出这些字符串。
答案 1 :(得分:2)
要将a
放在范围内,请在if语句之前初始化它。
此外,a
是一个数组,您必须指定要访问的位置。
在这种情况下,循环指定值0到4,一次一个。
ifstream file("d:\\t.txt");
string a[5];
if (file.is_open())
{
for (int i = 0; i < 5; ++i)
{
file >> a[i];
}
}
for (int i = 0; i < 5; ++i)
{
cout << a[i];
}
system("pause");
答案 2 :(得分:1)
a
不是std::string
,而是std::string
的数组。但是,编译器真的在抱怨范围。您在if { }
块中声明了它,但尝试在外部块中使用它。其次,你不必在这里处理数组,特别是如果你打算从文件中读取数据。使用std::vector
代替,几乎没有开销。
std::vector<std::string> a;
if (file.is_open())
{
std::string word;
while (file >> word)
a.push_back(word);
}
答案 3 :(得分:1)
如果
,则数组a具有语句的块范围 if (file.is_open())
{
string a[5];
for (int i = 0; i < 5; ++i)
{
file >> a[i];
}
}
然后控件被传递到复合语句之外,如果数组将被销毁并且标识符a将不可见。
还有另一个问题。我想你想在这个语句中输出数组的每个元素
cout<< a;
而不是数组第一个元素的地址。
以下列方式改写主要
int main()
{
const size_t N = 5;
string a[N];
ifstream file("d:\\t.txt");
if (file.is_open())
{
for ( size_t i = 0; i < N; ++i )
{
file >> a[i];
}
}
for ( size_t i = 0; i < N; ++i )
{
cout << a[i] << endl;
}
system("pause");
}
您可以使用基于范围的语句输出数组
for ( const auto &s : a ) cout << s << endl;
此外,您应该编写像
这样的C标头#include <cstdio>
#include <cstdlib>
由于程序中没有使用标头<cstdio>
的声明,因此您可以删除相应的#include指令。