相关疑难解决方法(0)

为什么EOF字符如果放在一行末尾不起作用?

我正在学习C++并试图理解为什么EOF字符(Windows上的Ctrl + Z)如果放在一行的末尾就不会破坏while循环.

我的代码:

int main() {
    char ch;
    while(cin >> ch) {
        cout << ch;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我输入^ Z时,循环中断.但是当我输入12 ^ Z时,它没有.为什么?

c++

11
推荐指数
2
解决办法
1726
查看次数

为什么std :: basic_ios会重载一元逻辑否定运算符?

C++ IO流的基类std::basic_ios定义operator void*()为返回!fail()operator!()返回fail().这让我想知道为什么我们需要它operator!().当然,!is也可以通过隐式调用operator void*()和否定其结果来工作.

我在这里遗漏了什么,还是纯粹出于历史原因而std::basic_ios::operator!()定义的?

一个在comp.lang.c ++的问题.主持并没有带来任何答案要么.

c++

9
推荐指数
1
解决办法
504
查看次数

cin.eof()功能

我理解cin.eof()测试流格式.在输入时,输入错误时不会到达字符结尾.我在MSV C++ 2010上对此进行了测试,并没有理解奇怪的结果.无论我给出什么输入,我都会收到程序中存在的格式错误消息.

#include <iostream>
using namespace std;

int main()
{
    int i;
    cin>> i;

    if(!cin.eof())
    {
        cout<< "\n Format Error \n";
    }
    else
    {
        cout<< "\n Correct Input \n";
    }

    getchar();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果我预计:

i =的值

  1. 10 => 正确输入但输出为格式错误
  2. 12a => 格式错误

有人可以解释我哪里错了.谢谢.

c++ iostream visual-c++

8
推荐指数
3
解决办法
8万
查看次数

错误的输入将导致程序退出

看看这段代码:

#include <iostream>
using namespace std;
int main()
{
    string s;
    int n;
    float x;
again:
    cout << "Please Type this: ABC456 7.8 9 XYZ\n";
    cin >> s >> n >> x >> s;
    cout << "\nDo you want to try Again(y/n)? ";
    char t;
    cin >> t;
    if (t=='y' || t=='Y')
        goto again;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

只需尝试键入"ABC456 7.8 9 XYZ"并按Enter键,它将导致程序退出,然后提示用户再次尝试.我知道输入是错误的,它们不属于它们的类型,但它为什么会导致退出?以及如何避免退出?

c++

6
推荐指数
2
解决办法
2007
查看次数

关于使用 iostream 进行解析的准则是什么?

我发现自己最近写了很多解析代码(大部分是自定义格式,但并不真正相关)。

为了增强可重用性,我选择将解析函数基于 i/o 流,以便我可以将它们与boost::lexical_cast<>.

然而,我意识到我从未在任何地方读过任何有关如何正确执行此操作的内容。

为了说明我的问题,让我们考虑一下我有三个类Foo,BarFooBar

AFoo由以下格式的数据表示:string(<number>, <number>)

ABar由以下格式的数据表示:string[<number>]

AFooBar是一种变体类型,可以容纳 aFoo或 a Bar

现在假设我operator>>()为我的Foo类型写了一个:

istream& operator>>(istream& is, Foo& foo)
{
    char c1, c2, c3;
    is >> foo.m_string >> c1 >> foo.m_x >> c2 >> std::ws >> foo.m_y >> c3;

    if ((c1 != '(') || (c2 != ',') || (c3 != ')'))
    {
      is.setstate(std::ios_base::failbit);
    }

    return …
Run Code Online (Sandbox Code Playgroud)

c++ parsing iostream std stream

5
推荐指数
1
解决办法
1159
查看次数

使用迭代器,ifstream,ofstream意图完成它的方式

我有一个包含一堆单词的txt文件,每行一个.我需要读取这个文件,并把每个单词的列表,然后用户就可以修改此列表编辑完成后,程序会写一个新的文件修改的列表.

因为它是c ++的对象,我将有两个类,一个用于读/写文件,另一个用于编辑/混淆列表和用户.

考虑到这种方法,这是我在第一节课中的阅读功能:

bool FileMgr::readToList(list<string> &l)
{
if(!input.is_open())
    return false;

string line;
while(!input.eof())
{
    getline(input, line);
    l.push_back(line);
}
return true;
}
Run Code Online (Sandbox Code Playgroud)

请记住:输入是在构造函数中打开的.问题:是否有一种不那么多余的方法可以从istream中获取该死的线并将其推回l?(中间没有'字符串').除了问题,这个功能似乎正常.

现在输出功能:

 bool FileMgr::writeFromList(list<string>::iterator begin, list<string>::iterator end)
{
    ofstream output;
    output.open("output.txt");
    while(begin != end)
    {
        output << *begin << "\n";
        begin++;
    }
    output.close();
    return true;
}
Run Code Online (Sandbox Code Playgroud)

这是我主要的一部分:

    FileMgr file;
list<string> words;
file.readToList(words);
cout << words.front() << words.back();
list<string>::iterator begin = words.begin();
list<string>::iterator end = words.end();
file.writeFromList(begin, end);
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助,这两个功能现在都有效.现在关于样式,这是实现这两个功能的好方法吗?getline(输入,线)部分我真的不喜欢,任何人都有更好的主意?

c++ file-io iterator fstream coding-style

4
推荐指数
1
解决办法
8426
查看次数

决定一个数字是完美的还是素数

问题是:"写一个函数来找出一个数字是一个素数还是一个完整的数字."

到目前为止,我已经完成了最完美的部分,这就是我所拥有的:

#include <iostream>
using namespace std;
bool perfectNumber(int);
int main()
{
 int number;

 cout<<"Please enter number:\n";
 cin>>number;
 bool perfectNumber(number);

 return 0;
}
bool perfectNumber(int number)
{
 int i;

 int sum=0;
 for(i=1;i<=number/2;i++)
 {
  if(number%i==0)
  {
   sum+=i;
  }
 }
 if (sum==number)
  return i;
 else
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,这段代码似乎有错误.我查看了这本书,但没有谈论这个话题.我想获得有关如何修复此代码的建议.

谢谢!

c++ primes numbers modulus perfect-numbers

2
推荐指数
1
解决办法
2779
查看次数

在文本文件中读取一行两次

我有这个文本样本

Ahmed 10
kmal 5
doola 6
Run Code Online (Sandbox Code Playgroud)

我正在使用此代码来阅读它

if (myfile.is_open())
{
  while ( myfile.good() )
{

    myfile >> name;
    myfile >> phone;
    cout << name <<" "<<phone<<endl;

}
myfile.close();
Run Code Online (Sandbox Code Playgroud)

}

我得到了这个输出

Ahmed 10
kmal 5
doola 6
doola 6
Run Code Online (Sandbox Code Playgroud)

为什么这段代码会读取最后一行两次?

c++

2
推荐指数
1
解决办法
4902
查看次数