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

use*_*540 -4 c variables storage types

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

int X;
printf("enter a number or a name")
scanf("%d", &X);
printf("%d", X);
Run Code Online (Sandbox Code Playgroud)

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

pto*_*ato 8

你不能这样做.诚然,你可以存储两种类型相同的变量-查找一个什么union呢-但你不能给那些之一scanf()和扫描或者一个字符串一个数字.

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


Kei*_*son 7

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

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

错误地认为将字符串或整数存储到同一个变量中就是这样做的.事实并非如此.

这是一个大致的概述:

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

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

  3. 如果字符串不是"exit",请检查它是否是整数 - 更准确地说,它是否是表示整数的字符序列.你可以用strtol()它.例如,如果输入字符串是"123",则strtol()返回该long123. strtol()还可以告诉您字符串表示的整数值是否超出范围,或者它是否完全代表整数值.如果输入是"foobar",或"-123",或决定您想要做什么"".

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

关键点在于,您需要两个变量,一个char用于保存输入行的数组,以及一个整数(intlong),用于保存转换后的整数值(如果该字符串包含整数的表示形式).

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