您当前位置:手机评站网 > 手机教程 >

char s[10];scanf("%s",s);改为scanf("%s",&s);也正确,为什么?求解释:s与&s都表示地址,且值相等。

  • s与&s类型不一样,s的类型为char *,&s的类型为char (*)[10],即指向一行有10个字符的指针。

  • 在scanf("%s",&s);语句中,&s有一个隐含的强制类型转换,即相当于scanf("%s",(char *)&s);

    扩展资料:

    1. scanf()是C语言中的一个输入函数。它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。

    2. scanf的发展:使用scanf函数进行输入,必须指定输入的数据的类型和格式,不仅繁琐复杂,而且很容易出错。C++保留scanf只是为了和C兼容,以便过去用C语言写的程序可以在C++的环境下运行。C++的编程人员都愿意使用cin进行输入,很少使用scanf。

      scanf字符串相关话题

      使用scanf输入字符串时报错

      程序如图所示,定义了一个结构体数组,结构体中的name是用来储存字符串的,在主函数中,使用scanf_s对结构体的name赋值,实际运行过程中,每次输字符串的时候都会报错,求教是哪里写的不对了,还是说跟我使用的scanf_s有关系?软件是vs 2015图总共四张,点击箭头可以看其他两张

      展开

      &xe671;

    3. &xe673;

      scanf_s需要指定缓冲区长度,你试试scanf_s("%s", pstu[i].name, 10);

      追问

      基本可以确定是scanf_s的锅了,我换了visual c++编译这个程序,把scanf_s改成了scanf,运行完全正常,没有报错,然后按照你说的的在vs 2015那个程序里指定了缓冲区长度,运行也正常了。我还有一个额外的问题,scanf_s这个缓冲区是什么机制,还有scanf_s("%s", pstu[i].name, 10);这段代码,是不是只有在处理字符串数组时,才会用到10这个参数

      c语言中,如何将一个字符串通过scanf赋给二维字符数组的其中一行?

      若要输入几个字符串,如何通过scanf将这些字符串分别赋给a[i][j]中的一行,即使a[1][i],a[2][i]等为所输入的字符串中的一个??

      scanf("%s",a[i]);即可,a[i]为你想输入到的行数。满意请采纳!

      追问

      i可否为一变量?这样行吗char b[3][10];int a;for (a=0;a=2;a++) scanf ("%s &47;n",&b[a]);

      追答

      可以,但是scanf不用&92;n,而且字符数组不用取地址符

      C语言结构体成员变量的中字符串型数值型在一个scanf函数里输入的问题

      include <stdio.h> include <stdlib.h>struct stu{ char name[10]; int num; int age; char addr[15];}sa[3],sb[3],*pp,*qq; //创建结构体类型struct stu的同时,定义结构体数组sa、sb,定义结构体指针变量 pp、qq。 int main(){ FILE *fp; char ch; int i; if((fp=fopen("D:&92;&92;学习&92;&92;C语言源码&92;&92;devC++&92;&92;第13章 文件&92;&92;stu_list.txt","w"))==NULL) //以只写的方式打开文件 ,没有该文件的情况下会创建该文件 { printf("Cannot open file,press any key to exit"); getchar(); exit(0); } printf("input data&92;n"); pp=sa; for(i=0;i<3;i++,pp++) { scanf("%s%d%d%s",pp->name,&pp->num,&pp->age,pp->addr); //先用scanf给结构体的成员变量赋值 fprintf(fp,"%s%d%d%s&92;n",pp->name,pp->num,pp->age,pp->addr); //然后用fprintf将结构体成员变量的值写入fp所指向的文件stu_list.txt中去 } fclose(fp); //完成写入文件操作后,关闭文件,使指针fp不再指向该文件 fp=fopen("D:&92;&92;学习&92;&92;C语言源码&92;&92;devC++&92;&92;第13章 文件&92;&92;stu_list.txt","r"); //以只读的方式打开文件 qq=sb; printf("name&92;tnumber age addr&92;n"); for(i=0;i<3;i++,qq++) { fscanf(fp,"%s%d%d%s",qq->name,&qq->num,&qq->age,qq->addr); //先用fscanf将fp所指向的文件stu_list.txt中的值读取到结构体成员变量中 printf("%s&92;t%5d%3d%s&92;n",qq->name,qq->num,qq->age,qq->addr); //然后用printf输出结构体变量的值 } fclose(fp); //完成读取文件操作后,关闭文件,使指针fp不再指向该文件 }我要如何输入,才能保证4个成员变量都被成功赋值,而不是都输入到了第一个字符串成员变量里

      展开

      //修改了一点,注意看说明 include <stdio.h> include <stdlib.h>struct stu{char name[10];int num;int age;char addr[15];}sa[3],sb[3],*pp,*qq;	//创建结构体类型struct stu的同时,定义结构体数组sa、sb,定义结构体指针变量 pp、qq。 int main(){FILE *fp;char ch;int i;if((fp=fopen("D:\\学习\\C语言源码\\devC++\\第13章 文件\\stu_list.txt","w"))==NULL)	//以只写的方式打开文件 ,没有该文件的情况下会创建该文件 {printf("Cannot open file,press any key to exit");getchar();exit(0);}printf("input data\n");pp=sa;for(i=0;i<3;i++,pp++){scanf("%s%d%d%s",pp->name,&pp->num,&pp->age,pp->addr);	//先用scanf给结构体的成员变量赋值 //在下在这句多加几个空格,作为输入数据的分隔符,注意输入的人名和地址中应该没有空格,不然会出错 //或者文件的输入和输出全部指定宽度 fprintf(fp,"%s %d %d %s\n",pp->name,pp->num,pp->age,pp->addr);	//然后用fprintf将结构体成员变量的值写入fp所指向的文件stu_list.txt中去 }fclose(fp);	//完成写入文件操作后,关闭文件,使指针fp不再指向该文件 fp=fopen("D:\\学习\\C语言源码\\devC++\\第13章 文件\\stu_list.txt","r");	//以只读的方式打开文件 qq=sb;printf("name\tnumber age addr\n");for(i=0;i<3;i++,qq++){fscanf(fp,"%s%d%d%s",qq->name,&qq->num,&qq->age,qq->addr); //先用fscanf将fp所指向的文件stu_list.txt中的值读取到结构体成员变量中 printf("%s\t%5d%3d%s\n",qq->name,qq->num,qq->age,qq->addr); //然后用printf输出结构体变量的值 }fclose(fp);	//完成读取文件操作后,关闭文件,使指针fp不再指向该文件 }

      scanf_s()传递的参数太多?

      在VS2017里写C。float inch=0.0f;scanf_s("%f",&inch,sizeof(inch));为什么下面提示警告scanf_s格式字符串中提供的参数太多?因为scanf_S是需要检查边界的呀,所以不是应该有sizeof来限制的吗?当我删掉sizeof参数的时候,警告消失……请问这是什么情况?

      展开

      通常 格式 %s 时才有必要 加上 长度。另外,长度参数 是 unsigned 型, 而不是 size_t 型, 可以直接写整形常数,sizeof()得到的是 size_t 型。

      c语言scanf怎么同时输入两个字符

      这段代码编译发生错误,错在那你,请指点,谢谢

    4. scanf_s("%c %c", &sh, sizeof(sh), &cd, sizeof(cd));sizeof(sh) 这个参数就是要读取的长度嫌麻烦就用scanf ,vs中不能用的话就在文件开头加入define _CRT_SECURE_NO_WARNINGS

      C语言中关于scanf输入字符问题大神速来

      inculde<stdio.h>int main(void) char ch scanf("%c",&ch) printf("ch=%c&92;n",ch)这里输入一个c为什么输出还是c,而不是c的ASCII的值

      原因是在input函数里面有接受用户输入的动作,而输入一定是以回车结束,那么这个回车就会残留在缓存中,而当你的scanf读取flag的时候,程序会自动获取前面的那个回车符号,这就是用%c会自动跳过的原因,而用%s的话,程序就会等待下一行输入,回车符号并不会被接收,建议在scanf("%c", &flag);修改为:fflush(stdin); //清空缓存scanf("%c", &flag);

      scanf读取字符串时为何把空格读进去了?

      scanf读取字符串时为何把空格读进去了?按图片输入为什么emp[i].sex把空格读进去了而emp[i].name却没有把空格读进去?include "stdio.h"define N 3struct employee{ int num; char name[15]; char sex[10]; short age; char addr[20]; float salary; char health[10]; char degree[10];}emp[N];int main(){ FILE *fp; int i; for(i=0;i<N;i++) { printf("请输入员工信息&92;n");scanf("%d%s%c%d%s%f%s%s",&emp[i].num,emp[i].name,emp[i].sex,&emp[i].age,emp[i].addr,&emp[i].salary,emp[i].health,emp[i].degree); }

      展开

    5. 这是因为%s、%d都会忽略开头遇到的空格,遇到空格则结束读入;而%c则把空格也当作是一个有效字符读取了。

      追问

      但是改成字符串s还是这样啊,依旧读空格

      就是从addr字符串输入开始就出问题了

      追答

      读入%d,%f时,都要用&取地址符的

      追问

      用了啊

      追答

      把代码复制上来看。

      更多追问

      为什么是D呢?关于字符串的scanf输入问题

      scanf函数里面的参数有两个,第一个是字符串,就是双引号部分,第二个参数是一个地址,而数组名就是一个地址了

      追答

      c选项后面的str[10]不是一个数组的地址了,而是str数组里面第10号元素的地址

      scanf输入后printf为什么无法输出?

      include<stdio.h>/**/int main(){int a,b,z;printf("请输入a的值 ");scanf("%a",&a);getchar();printf("请输入b的值 ");scanf("%b",&b);getchar();z=a+b;printf("a+b=%d",z);return 0;}

      代码有错误,原因是 scanf第一个参数是格式控制字符串, int的输入格式为%d具体修改如下:scanf("%a",&a); 修改为 scanf("%d",&a);scanf("%b",&b); 修改为 scanf("%d",&b);

  • 来源: 手机评站

    热门手机排行榜

    1. 1Redmi K20¥1999
    2. 2vivo Z5x¥1398
    3. 4realme X¥1499
    4. 5vivo X27¥3598
    5. 6一加 6¥3199
    6. 9荣耀 Magic2¥3799
    7. 10三星 Note9¥6999

    Copyright © 2016-2019 手机评站网(www.pingzhan.net)版权所有

    业务联系: