【问题标题】:Unable to store value in array in c++无法在c ++中将值存储在数组中
【发布时间】:2013-09-29 20:08:37
【问题描述】:

我愿意做的是将数组的所有值转换为它们各自的 ASCII 值,然后 将它们存储在另一个数组中。我的代码能够将字符值转换为 ASCII,但无法将它们存储在另一个数组中。请帮帮我。

#include <iostream>
#include <string>
using namespace std;
int main(){
    char ass[10];
    char name[]= "Chaitanya";
    int size=sizeof(name);
    for(int i=0; i<size; i++){
        int p=name[i];
        cout<<p<<"\n";
        for(int j=0; j<size; j++){
            ass[j]=p;
            }
        }
    return 0;
    }

当我尝试运行此程序时,我收到以下错误消息:

warning: variable ‘ass’ set but not used [-Wunused-but-set-variable]

谢谢! 我拿到了上一张。但是如果我想再次打印所有存储在 ass 中的元素呢?我正在使用以下代码,它什么也不做。我没有收到任何错误。

#include <iostream>
#include <string>
using namespace std;
int main(){
    char ass[10];
    char name[]= "Chaitanya";
    int size=sizeof(name);
    for(int i=0; i<size; i++){
        int p=name[i];
        cout<<p<<"\n";
        for(int j=0; j<size; j++){
            ass[j]=p;
            }
        }
    for(int q=0; q<size; q++){
        cout<<ass[q];
        }
    return 0;
    }

【问题讨论】:

  • "将字符值转换为 ASCII" - 这并不意味着什么。字符值已经是通常被解释为 ASCII 超集的数字代码。其他一切都是表示的问题,即是通过在表格中查找字形(将其视为字符)还是将其转换为数字的字符串表示形式(将其视为整数)来显示该数字代码。

标签: c++ arrays loops


【解决方案1】:

您的警告并非失败。只是指出,一旦你存储了它,你就永远不会使用它!

【讨论】:

  • 更准确地说,你不会计算
  • 但这不会打印存储在 ass[0] 中的值。我想再次打印存储在 ass 中的所有元素,但它不起作用。
  • 您发布的代码没有尝试再次打印出来。把整个代码放进去,我们看看!
【解决方案2】:

警告是正确的,您只设置了ass 的值,您没有使用之后设置的值。如果你在循环之后添加了一个cout,警告就会消失:

std::cout << ass[0] << std::endl ;

我也认为你不需要第二个内部循环,如果你想打印出ass 的每个元素,你可以在设置后添加它。因此,修复和添加打印输出可能如下所示:

for(int i=0; i<size; i++)
{
    int p=name[i];
    cout<<p<<"\n";

    ass[i]=p;
    std::cout << ass[i] << std::endl ;        
}

【讨论】:

  • 但这不会打印存储在 ass[0] 中的值。我想再次打印存储在 ass 中的所有元素,但它不起作用。
  • @ChaitanyaChoudhary 添加了更多细节
【解决方案3】:

警告:变量“ass”已设置但未使用 [-Wunused-but-set-variable]

这个警告只是说你设置了变量ass,但你从未使用它。这根本不是错误。

例如,尝试为该数组输出一个值,警告将消失

std::cout << ass[0] << std::endl;

这里有这个警告的一小部分:http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html

【讨论】:

    【解决方案4】:

    您的警告只是告诉您您没有使用变量ass。这不是错误,但您的代码确实有问题:

    int size = sizeof(name);
    
    for (int i = 0; i < size; i++)
    {
        int p = name[i];
        for (int j = 0; j < size; j++)
        {
            ass[j] = p;
        }
    }
    

    第二个 for 循环将简单地用单个字符 p 覆盖 ass 中的每个字符。不需要嵌套的 for 循环,只需从主循环中分配字符即可:

    for (int i = 0; i < size; i++)
    {
        int p = name[i];
        ass[i] = p;
    }
    

    此外,这可以通过标准库函数来实现。例如:

    #include <iostream>
    #include <string>
    
    int main()
    {
        std::string ass;
        std::string name = "Chaitanya";
    
        for (auto a : name)
        {
            std::cout << static_cast<int>(a);
        }
    
        ass = name;
        std::cout << ass; // "Chaitanya"
    

    【讨论】:

    • 感谢您的建议。我认为覆盖是一个好主意,而不是运行嵌套循环。向你竖起大拇指
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多