在C中,如何在同一个变量中存储String类型和int类型?

时间:2012-04-17 05:17:09

标签: c variables types storage

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

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

显然我需要用String类型和int类型声明变量X,我该怎么做呢?感谢

4 个答案:

答案 0 :(得分:8)

你做不到。是的,你可以在同一个变量中存储两种类型 - 查找union的作用 - 但你不能将其中一种提交给scanf()并扫描 一个字符串一个数字。

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

答案 1 :(得分:7)

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

  

我提示用户输入一个数字或单词exit退出该程序。

您已经假定错误地,将字符串或整数存储到同一个变量中就是这样做的。事实并非如此。

以下是一般概要:

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

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

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

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

    关键是你需要两个变量,一个char数组来保存输入行,一个整数(int或{{1} })保存转换后的整数值如果该字符串包含整数的表示。

    (我不提供代码,因为坦白说,这有点像家庭作业。)

答案 2 :(得分:0)

struct StringAndInt
{
    int theInt;
    char *theString; /* or whatever type you want */
};

struct StringAndInt X;

C ++有更好的选择。

答案 3 :(得分:0)

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

char input[25];
int value = 0;

fgets(input, 25, stdin);
value = atoi(input);

printf("String Value = %s and Int Value = %d", input, value);