【问题标题】:in C, how do I store a String type AND an int type in the same variable?在 C 中,如何将 String 类型和 int 类型存储在同一个变量中?
【发布时间】:2012-04-28 10:53:32
【问题描述】:

我想将一个整数和一个字符串存储在一个名为 X 的变量中,然后显示它。

int X;
printf("enter a number or a name")
scanf("%d", &X);
printf("%d", X);

显然我需要用 String 类型和 int 类型声明变量 X,我该如何在 C 中做到这一点?谢谢

【问题讨论】:

  • 你的问题没有多大意义。你到底想完成什么?您能否根据您试图实现的行为来表达问题,而不参考应该存储在哪个变量中的内容?
  • 我想要一个可以存储整数或字符串的变量。
  • 你有一些你想解决的问题,你认为“将一个整数和一个字符串存储在同一个变量中”是解决它的方法。你几乎肯定错了。告诉我们您要解决的问题,我们可以帮助您找出解决方法。你想让你的程序做什么?另见mywiki.wooledge.org/XyProblem
  • 我提示用户输入数字或exit字样退出程序。

标签: c variables types storage


【解决方案1】:
struct StringAndInt
{
    int theInt;
    char *theString; /* or whatever type you want */
};

struct StringAndInt X;

C++ 有更好的选择。

【讨论】:

  • 很明显这对他毫无帮助。他想同时扫描一个字符串或一个整数,这是不可能的。
  • 当然可以。如果他愿意,他可以将scanf 放入字符串部分,然后将atoi 放入整数部分。他还可以添加一个标志来指示他想使用哪个值。
  • “C++ 有更好的选择。” 并非如此。 :-) 你最终还是会声明 structclass,它们在功能上几乎相同。
  • 它们在功能上相同,但使用起来更简单。例如,您可以使用pair<int,string>。您可以获得字符串的所有内存管理,并且不需要声明类或结构。
  • 给菜鸟一个火箭发射器被认为是有害的。
【解决方案2】:

你不能那样做。诚然,您可以将两种类型存储在同一个变量中——查看 union 的作用——但您不能将其中一种类型提供给 scanf() 并扫描 either 字符串 或一个数字。

X 声明为字符串,scanf() 声明为字符串,然后使用strtol() 尝试从字符串中读取数字。如果strtol() 返回零并且 errno 已设置(最后这一点很重要,因为如果用户键入strtol() 也会返回零0),那么转换失败并且没有号码,所以你有一个名字。

【讨论】:

    【解决方案3】:

    你真的不能那样做。但是您可以将输入读取为字符串并将其转换为 int

    char input[25];
    int value = 0;
    
    fgets(input, 25, stdin);
    value = atoi(input);
    
    printf("String Value = %s and Int Value = %d", input, value);
    

    【讨论】:

      【解决方案4】:

      在评论中,您(最终)表明了您要完成的工作:

      我提示用户输入一个数字或退出这个词来退出程序。

      您已经错误地假设,将字符串或整数存储到同一个变量中是解决此问题的方法。不是。

      这是一个大致的大纲:

      1. 将一行输入读入一个字符串。为此使用fgets()

      2. 检查输入行是否为字符串"exit"。请记住,fgets() 在字符串中留下换行符 ('\n');你必须允许这样做。要比较字符串值,请使用strcmp()。如果输入字符串匹配"exit",则退出程序。

      3. 如果字符串不是"exit",检查它是否是一个整数——更准确地说,它是否是一个表示整数的字符序列。您可以为此使用strtol()。例如,如果输入字符串是"123",那么strtol() 将返回long123strtol() 还可以告诉您字符串表示的整数值是否超出范围,或者它是否完全表示整数值。如果输入为"foobar""-123""",请确定您要执行的操作。

      您将需要仔细阅读所有这些功能的文档。

      关键是您需要两个变量,一个char 数组来保存输入行,一个整数(intlong)来保存转换后的整数值 如果字符串保存整数的表示形式。

      (我不提供代码,坦率地说,这闻起来像家庭作业。)

      【讨论】:

        猜你喜欢
        • 2018-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多