我想在一个名为X的变量中存储一个整数和一个String,然后显示它。
int X;
printf("enter a number or a name")
scanf("%d", &X);
printf("%d", X);
显然我需要用String类型和int类型声明变量X,我该怎么做呢?感谢
答案 0 :(得分:8)
你做不到。是的,你可以在同一个变量中存储两种类型 - 查找union
的作用 - 但你不能将其中一种提交给scanf()
并扫描 一个字符串或一个数字。
将X
声明为字符串,scanf()
表示字符串,然后使用strtol()
尝试从字符串中读取数字。如果strtol()
返回零且 errno
已设置(最后一个很重要,因为如果用户键入strtol()
,0
也会返回零,然后转换失败并且没有数字,所以你得到了一个名字。
答案 1 :(得分:7)
在评论中,您(最终)表明了您要完成的任务:
我提示用户输入一个数字或单词exit退出该程序。
您已经假定错误地,将字符串或整数存储到同一个变量中就是这样做的。事实并非如此。
以下是一般概要:
将一行输入读入字符串。请使用fgets()
。
检查输入行是否为字符串"exit"
。请记住,fgets()
会在字符串中留下换行符('\n'
);你必须允许这样做。要比较字符串值,请使用strcmp()
。如果输入字符串与"exit"
匹配,请退出程序。
如果字符串不是"exit"
,请检查它是否是整数 - 更准确地说,它是否是表示整数的字符序列。您可以使用strtol()
。例如,如果输入字符串为"123"
,则strtol()
将返回long
值123
。 strtol()
还可以告诉您字符串表示的整数值是否超出范围,或者它是否表示整数值。如果输入为"foobar"
,"-123"
或""
,请确定您要执行的操作。
您将需要仔细阅读所有这些功能的文档。
关键是你需要两个变量,一个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);