关于C语言 的__int64 的:如何输出从键盘读入的__int64 变量 问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于C语言 的__int64 的:如何输出从键盘读入的__int64 变量 问题相关的知识,希望对你有一定的参考价值。

我从键盘输入一个 __int64 数据
然后想把它输出来,用了三种printf("%",)格式好像都不行
我该怎么办?求大神解答
下面是测试代码:

#include<stdio.h>
int main()

__int64 a;
while(scanf("%I64d",&a)!=EOF)

printf("%d \n%I64d \n%I64u",a,a,a);

return 0;


结果如下:

输入没有问题,问题在输出
printf函数对于输出参数的是按照内存结构解释的,而不是逻辑上的,
那么
printf("%d \n%I64d \n%I64u",a,a,a); 这个操作会把3个参数当作int , __int64,__int64 解释,这样就把第一个a的8个字节的前4个字节当作一个int,然后把第一个a的后四个字节和下一个a的前4个字节当作一个__int64, 第三个参数也一样错位
对第一个a做个强制转换就行了:
printf("%d \n%I64d \n%I64u",(int)a,a,a);追问

大神们,我代码都贴出来了,你们能先试试吗?

改了之后的运行结果,

有区别吗?

追答

 

我用vc2013可以啊,你什么编译器啊

根据你修改后的结果来看,你的scanf是%d格式,而不是%I64d格式,还有你贴出来的代码不是你运行的代码,因为你贴出来的代码不能通过编译,所以,你最好复制一下:

#include<stdio.h>
int main()

 __int64 a;
 while (scanf("%I64d",&a)!=EOF)
 
  printf("%d \\n%I64d \\n%I64u",(int)a,a,a);
 
 return 0;

追问

我代码你编译过了吗?不就是!=EOF 多了个空格吗? 你改过来不就行了吗?跟我们主题有多大关系?
我算是彻底莫名其妙了,现在再试又跟你一样的呢。
非常谢谢你啦。

追答

因为你贴出的代码是你重新敲上来的,而不是复制你正在调试的,所以可能就会有疏忽,你调试过程中把某些东西修改了,但你忘了,这是常有的事

参考技术A 请问你的“%I64d”中的‘l’是小写的L还是大写的i,正确的应该是大写的i,你再试试

c语言,从键盘输入一串字符串,统计字符串中特定字符的个数,并输出个数

程序设计思路如下:

从键盘分别输入字符串和要统计的字符,然后对此字符串从头开始逐个与所统计的字符比较,如相同,则让计数器加1,知道字符串整体比较结束为止,计数器中就是需统计的字符的个数。

#include "stdio.h"

main()
 char str[100],ch;  /*定义str字符串,定义ch用来存放要统计的字符*/
  int cnt=0,i;       /*定义cnt用作计数器,初始值为0*/
  
  /*输入字符串*/
  printf("请输入字符串:");    
  gets(str);
  
  /*输入要统计的字符*/
  printf("请输入要统计的字符:");
  scanf("%c",&ch);
  
  /*对此字符串从头开始逐个与所统计的字符比较,如相同,则让计数器加1,知道字符串整体比较结束为止*/
  for( i=0;str[i];i++ )
     if( str[i]==ch )
         cnt++;
  
  /*输出结果*/       
  printf("%s串中%c字符的个数是:%d个",str,ch,cnt);

参考技术A

主要代码:

char s[1000];
int i,j=0; 
scanf("%s",s); 
for(i=0;i<1000;i++)

if(s[i]=='*') //for循环查找字符*的数量
j++;//利用变量j计数

追问

可不可以编写完整程序呢?谢谢

追答

基本上把它写入主函数就行了吧

#include<stdio.h>

int main()

  

char s[1000];

int i,j=0; 

scanf("%s",s); 

for(i=0;i<1000;i++)



if(s[i]=='*') //for循环查找字符*的数量

j++;//利用变量j计数

 

printf("指定字符数为%d\\n",j);

return 0;

追问

要输出的是从键盘上输入的一个特定字符的个数,不是*

追答

你把*换成你要求的字符就行了,*只是做个示范。你的意思是我把它改改,加一个从键盘输入特定字符的语句?

追问

不用了,你写的对的,可能我理解错题意了,谢谢了

追答

如你所说,我写了个比较全能的代码,应该更符合题意

#include<stdio.h> 

int main() 

   

char s[1000],sp; 

int i,j=0; 

printf("请输入字符串\\n");

scanf("%s",s);

getchar();

printf("请输入特定字符\\n");

scanf("%c",&sp);

for(i=0;i<1000;i++) 

 

if(s[i]==sp) //for循环查找字符sp的数量 

j++;//利用变量j计数 

  

printf("指定字符数为%d\\n",j); 

return 0; 

本回答被提问者采纳
参考技术B 主要代码:
char s[1000];
int i,j=0;
scanf("%s",s);
for(i=0;i<1000;i++)

if(s[i]=='*') //for循环查找字符*的数量
j++;//利用变量j计数
参考技术C 主要代码:
char s[1000];
int i,j=0;
scanf("%s",s);
for(i=0;i<1000;i++)

if(s[i]=='*') //for循环查找字符*的数量
j++;//利用变量j计数
参考技术D #include <stdio.h>
#include <string.h>
#define MAX 100
int main()

char num[MAX]=0;
char c=0;
int len,cnt=0;
scanf("%s %c",num,&c);
len=strlen(num);
while(len--)

if(c==num[len]) cnt++;

printf("%d\\n",cnt);
    return 0;

以上是关于关于C语言 的__int64 的:如何输出从键盘读入的__int64 变量 问题的主要内容,如果未能解决你的问题,请参考以下文章

C语言如何从键盘输入任意3个数,按从小到大的顺序输出?

在C/C++里,long long型的范围是多少,输入输出格式是啥?

一道简单的C语言题。有关double的溢出

C语言之如何输出uint32_t和uint64_t和16进制

怎么设定64位数据类型,C语言的

求教:C语言中__int64 的详细作用,用法