C 打印字符时输出随机值

C 打印字符时输出随机值,c,C,我的代码如下,我不熟悉C语言,但能流利地使用Java: #include<stdio.h> int main(){ int number; int firstInitial; int lastInitial; printf("\n\nEnter your first initial: "); scanf("\n\n%c", &firstInitial); printf("

我的代码如下,我不熟悉C语言,但能流利地使用Java:

#include<stdio.h>

int main(){

   int number;
   int firstInitial; 
   int lastInitial; 

   
   printf("\n\nEnter your first initial: ");
   scanf("\n\n%c", &firstInitial);

   printf("\nFirst Initial: %c", firstInitial);
   (int)firstInitial;
   printf("\nFirst Initial Decimal Value: %d", firstInitial);
   
   //Second Initial 
   
   printf("\n\nEnter your Last Initial: ");
   scanf("\n\n%c", &lastInitial);
   printf("\nLast Initial: %c", lastInitial);
   (int)lastInitial;
   printf("\nLast Initial Decimal Value: %d", lastInitial);
   
  
return 0;

} 
#包括
int main(){
整数;
int首字母;
int lastInitial;
printf(“\n\n输入首字母:”);
scanf(“\n\n%c”,&firstInitial);
printf(“\n首字母:%c”,首字母);
(int)首字母;
printf(“\n第一个初始十进制值:%d”,第一个初始值);
//第二首字母
printf(“\n\n输入最后一个首字母:”);
scanf(“\n\n%c,&lastInitial”);
printf(“\n最后一个首字母:%c”,最后一个首字母);
(int)最后一个首字母;
printf(“\n最后一个初始十进制值:%d”,最后一个初始值);
返回0;
} 

我的输出中的问题是,在我将字符转换为int之后,它会输出一个随机的7位数。例如,对于第一个首字母,我输入了“a”,收到的是“4194401”,而不是97。程序应该接收一个字符,并在ASCII图表中打印该字符及其字符的十进制值。

我已将
firstInitial
lastInitial
的数据类型更改为
char
,因为您需要一个字符。另外,
(int)firstInitial
(int)lastInitial
语句没有任何作用-无论有没有它们,代码都可以正常工作

#包括
int main(){
整数;
字符首字母;
字符首字母;
printf(“\n\n输入首字母:”);
scanf(“\n\n%c”,&firstInitial);
printf(“\n首字母:%c”,首字母);
printf(“\n第一个初始十进制值:%d”,第一个初始值);
//第二首字母
printf(“\n\n输入最后一个首字母:”);
scanf(“\n\n%c,&lastInitial”);
printf(“\n最后一个首字母:%c”,最后一个首字母);
printf(“\n最后一个初始十进制值:%d”,最后一个初始值);
返回0;
}

%c
告诉
scanf
下一个参数是
char*
,但您给了它一个
int*
。那是未定义的行为。从
int
转换到
char
是有效的,但不能从
int*
转换到
char*
。它们不一样。行
(int)lastInitial什么也不做。编译器应该给你一个警告,上面写着“表达式结果未使用”。@kaylum不是同样的可移植的,也不是到处都一样吗?使用参数,如
-Wall-Wextra-pedantic-Wconversion
等对GCC很有帮助,对Clang使用
-Weverything
。作为一种普遍趋势,不可预测和随机的结果要么是由于UB,要么是由于指针使用不当。@APJo不要在Clang上使用
-Weverything
。它有一些讨厌的警告,与日常使用无关<代码>-Wall-Wextra-Werror
对于新手来说是更好的选择。