【问题标题】:Not getting char array as output?没有将 char 数组作为输出?
【发布时间】:2014-05-09 09:48:06
【问题描述】:
#include <iostream>
#include <string>  
using namespace std;

int main()
{

char addi[5];
string name;

string a="ADD:";

     fgets(addi,5, stdin);
     cin>>name;
     addi[5]='\0';

 cout<<"addi"<<addi<<endl;

我有一个 addi char 数组,我想在其中存储“ADD:”和名称字符串,我想在其中存储要添加的字符串。输入格式为 ADD:wolf。为什么addi 不接受“ADD:”字符串吗?或者,由于我需要在进一步的步骤中将 ADD: 与一些字符串进行比较,所以我该怎么做。

【问题讨论】:

  • addi[5]='\0'; 是非法的,它超出了该数组的末尾。
  • 当前输出是多少?
  • 不清楚你想做什么。你的输入是什么?实际输出是多少?你期望什么输出?
  • ADD:marsz ADD:marsz DEL:Dabrowski DEL:z ......输入是这样的,我需要将前4个字符分开决定是否添加删除后面的字符串。所以我制作了一个大小为 5 的 char 数组,并在其中输入“ADD:”以及 name 中的另一个字符串。
  • 你为什么要使用 C 数组和混合输入法?对两个输入都使用 std::stringstd::cin

标签: c++ string input char


【解决方案1】:

我的猜测是您希望 fgets 调用获取前四个字符,然后使用 std::cin 获取剩余行。但是,它不是那样工作的。 fgets 调用获取完整行,即使它只将四个字符写入缓冲区。然后std::cin 的输入将等待永远不会到来的输入。

相反,我建议您阅读带有std::getline 的完整行,然后在冒号处拆分字符串以获得“键”和“值”。


实际上,由于std::getline支持简单的分词,你可以使用两个调用来读取输入:

std::string op;
std::string data;

std::getline(std::cin, op, ':');
std::getline(std::cin, data);

现在字符串 op 将包含例如ADD(冒号前的字符串),data 将包含冒号后的字符串。

【讨论】:

  • 现在当我将 addia 字符串进行比较时,它给了我错误的答案......我已将 a 字符串修改为 ADD getline(std::cin,addi,':'); getline(std::cin,name); cout
  • @Hari 您使用getline 获得的addi 字符串是没有分号,而a(在您的示例中来自问题)是 冒号。还有什么不同的吗? 的输出是什么?
  • 是的,我修改了 a。当我执行 addi.compare(a) 时没有得到输出,它运行良好。
  • @Hari 您是否尝试过在调试器中逐行单步执行您的代码?看看到底发生了什么?
猜你喜欢
  • 1970-01-01
  • 2011-06-08
  • 1970-01-01
  • 1970-01-01
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多