萌新求助(for循环问题)
这个是错误的#include <stdio.h>
#include <string.h>
int main()
{
char a,b;
scanf("%s",&a);
int n,i,j;
n=strlen(a);
j=n;
for(i=0;i<j;i++)
{
b=a;
}
printf("%s",b);
return 0;
}
这个是正确的
#include <stdio.h>
#include <string.h>
int main()
{
char a,b;
scanf("%s",&a);
int n,i,j;
n=strlen(a);
j=n;
for(i=0;i<j;i++)
{
b=a;
printf("%c",b);
}
return 0;
}
为什么循环外不能一起输出而非要单个单个的输出
for(i=0;i<j;i++)
{
b=a;
}
b='\0';///////////////////
printf("%s",b); 这串代码是想把输入的字符串反转吧,我改了一下#include <stdio.h>
#include <string.h>
int main()
{
char a,b;
scanf("%s",a);
int n,i,j;
n=strlen(a);
j=n;
for(i=0;i<j;i++)
{
b=a;
}
b='\0';
printf("%s",b);
return 0;
}
先说一下你发的正确的那串代码,第一个问题就是上面老哥写的b='\0'有了'\0'数组b才是字符串数组,没有就是一个字符数组
第二个问题就是printf写在循环里面了,鉴于你想问的问题情有可原,在改好第一个问题后数组b是字符串数组,字符串数组的数组名是一个地址,指向这个数组第一个字符。而%s接收的是一个地址,所以说应该把%c改为%s,在后面只需要写数组名b就行了,%s接收到地址后会按照地址打印出这个字符串(字符串在内存中的地址都是连续的),遇到'\0'停止。
第三个问题就是你的scanfscanf("%s",&a);
前面的课程在接受变量比如说接收一个整型变量:
int a;
scanf("%d",&a);
a是取地址符,作用是获得a的地址,scanf接收到字符后会按照a的地址把输入的数值放到变量a里,所以scanf括号里的逗号后面跟的是地址,那么上面已经讲过了,数组名就是数组首元素的地址,所以说只需要写a,并不需要&a bszs 发表于 2021-10-9 21:43
这串代码是想把输入的字符串反转吧,我改了一下
先说一下你发的正确的那串代码,第一个问题就是上面老哥写 ...
谢谢大佬,看了半天才看懂 bszs 发表于 2021-10-9 21:43
这串代码是想把输入的字符串反转吧,我改了一下
先说一下你发的正确的那串代码,第一个问题就是上面老哥写 ...
char d[] = ("FishC", "is", "Good!")
大佬,请问这个定义哪里错了 一只学C的萌新 发表于 2021-10-9 22:38
char d[] = ("FishC", "is", "Good!")
大佬,请问这个定义哪里错了
char d[]是字符数组,里面只能放字符,或者一个字符串,
char d[]={'a','b','c','\0'};
就像上面这样每一个字符用单引号隔开,带\0表示是一个字符串;
而一个字符串相当于一个字符数组,其数组名相当于第一个字符的的地址,如果说用一个d[]数组来包含三个数组"FishC", "is", "Good!"的话是不行的,需要d
把数组d定义为二维数组才行
也就是d={
{"FishC"},
{ "is"},
{"Good!"}
} bszs 发表于 2021-10-9 23:48
char d[]是字符数组,里面只能放字符,或者一个字符串,
char d[]={'a','b','c','\0'};
就像上面这样每 ...
仔细想一下,你把字符串当成一个一维数组,是不是要用二维数组来包含这个一维数组
比如说上面的d,第一个下标表示有三个数组,第二个下标表示每个数组包含的元素数量 bszs 发表于 2021-10-10 00:07
仔细想一下,你把字符串当成一个一维数组,是不是要用二维数组来包含这个一维数组
比如说上面的d ...
还有一点忘了说了,char d[] = ("FishC", "is", "Good!")这除了要改成二维数组外,小括号也要改成大括号
而且
char d={
{"FishC"},
{ "is"},
{"Good!"}
}
输出时可以printf("%s",d);
这里的d表示第三个字符串(把他当成数组)的数组名,同理,你还可以改成d,d
换一种思路,定义一种整形二维数组:
int a={
{1,2,3},
{4,5,6}
}
a是一个两行三列的二维数组,我们把每一行当成一个一维数组,每一个数组包含三个int 元素
:{1,2,3}是一个数组,对应为a,a,a
{4,5,6}为一个数组,对应为a,a,a
其中a可以当成a,a,a这个数组的数组名,同理a可以当成a,a,a这个数组的数组名
那么再回到
char d=
{
{"FishC"},
{ "is"},
{"Good!"}
}
把每一个字符串当成一个数组,你总不能用一个一维数组来包含三个一维数组 bszs 发表于 2021-10-10 00:25
还有一点忘了说了,char d[] = ("FishC", "is", "Good!")这除了要改成二维数组外,小括号也要改成大括号
...
如果你学到指针的话,定义一个指针数组:
char *d= {
"FishC", "is", "Good!"};
printf("%s"d);
这里每一个存在d里的字符串实际上就是首字符的地址。
当然这都是后话了,你学到指针数组与数组指针的时候可以回过来看看
如果还有什么不懂的话加我好友,我也是初学者,只不过学的比你快一点 bszs 发表于 2021-10-10 00:34
如果你学到指针的话,定义一个指针数组:
char *d= {
"FishC", "is", "Good!"};
谢谢大佬,昨天我没有完全看懂,今天把二维数组的课听了一遍之后差不多看懂了 bszs 发表于 2021-10-10 00:34
如果你学到指针的话,定义一个指针数组:
char *d= {
"FishC", "is", "Good!"};
我还没有加好友的权限,
这知识量比我多多了,我指针都没学到,来自大佬的谦虚 bszs 发表于 2021-10-9 21:43
这串代码是想把输入的字符串反转吧,我改了一下
先说一下你发的正确的那串代码,第一个问题就是上面老哥写 ...
我还差30积分才能添加好友 慢慢学吧,我学的够慢的了,论坛里大佬多,多问就行,希望你学到指针的时候不要被吓退,能够坚持下来
页:
[1]