1613551
发表于 2022-4-12 14:08:59
人造人 发表于 2022-4-12 13:52
第11行的if要不要执行,这取决于第9行的while
while条件成立就执行10行到24行的内容
11行的if自然在10 ...
还没打完,不是这个,不好意思
人造人
发表于 2022-4-12 14:10:53
1613551 发表于 2022-4-12 14:08
还没打完,不是这个,不好意思
没事,你慢慢组织语言,描述清楚你的问题
1613551
发表于 2022-4-12 14:14:23
本帖最后由 1613551 于 2022-4-12 14:19 编辑
人造人 发表于 2022-4-12 13:52
第11行的if要不要执行,这取决于第9行的while
while条件成立就执行10行到24行的内容
11行的if自然在10 ...
while ((ch = getchar()) != '\n')
比如这个程序,getchar()就是接收用户输入的字符是吗?然后把用户输入的字符依次放进ch里面,后面的!=0,其实我不是很懂!=0的概念,是!=0的时候为真吗?
然后我的疑惑就是假设我现在已经在键盘上输入了b,程序是还在循环的是吧?因为我没有按下回车也就是没有输出\n,那么执行到第5行的时候,putchar不会检测到ch里面有个值b吗?那么这时候不会输出putchar('a' + (ch - 'a' + 3) % 26)里面的数据吗?
while ((ch = getchar()) != '\n')
{
if (ch >= 'a' && ch <= 'z')
{
putchar('a' + (ch - 'a' + 3) % 26);
continue;
}
if (ch >= 'A' && ch <= 'Z')
{
putchar('A' + (ch - 'A' + 3) % 26);
continue;
}
putchar(ch);
}
putchar('\n');
1613551
发表于 2022-4-12 14:18:56
人造人 发表于 2022-4-12 14:10
没事,你慢慢组织语言,描述清楚你的问题
不好意思,是第五行
人造人
发表于 2022-4-12 14:21:42
1613551 发表于 2022-4-12 14:14
比如这个程序,getchar()就是接收用户输入的字符是吗?然后把用户输入的字符依次放进ch里面,后面 ...
后面的!=0,其实我不是很懂!=0的概念,是!=0的时候为真吗?
等于和不等于么,就是一个反逻辑
$ cat main.c
#include <stdio.h>
int main(void) {
int n = 123;
if(n == 0) printf("5: n == 0\n");
if(n != 0) printf("6: n != 0\n");
n = 0;
if(n == 0) printf("8: n == 0\n");
if(n != 0) printf("9: n != 0\n");
return 0;
}
$ gcc-debug -o main main.c
$ ./main
6: n != 0
8: n == 0
$
人造人
发表于 2022-4-12 14:22:46
1613551 发表于 2022-4-12 14:14
比如这个程序,getchar()就是接收用户输入的字符是吗?然后把用户输入的字符依次放进ch里面,后面 ...
因为我没有按下回车也就是没有输出\n
输出?
是getchar没有得到 '\n'
也就是ch中没有保存 '\n'
1613551
发表于 2022-4-12 14:23:31
风车呼呼呼 发表于 2022-4-12 13:50
一、
putchar()函数是输出一个字符
当给它的参数不是一个字符常量如“A”,也不是字符变量,如之前有定 ...
感觉好奇怪,比如这个程序为什么我输入50就是输出了50,而不是按照ASCII码里50输出2
#include <stdio.h>
int main() {
int ch;
printf("请输入:");
while ((ch = getchar()) != '\n') {
if (ch >= 32 && ch <= 126) {
putchar(ch);
}
}
putchar('\n');
return 0;
}
人造人
发表于 2022-4-12 14:25:20
1613551 发表于 2022-4-12 13:44
就比如小甲鱼的这个程序
当执行到这一步的时候为什么没有把值给输出出来呢?
看看这个能不能看懂
$ cat main.c
#include <stdio.h>
int main()
{
int ch;
printf("请输入明文:");
while ((ch = getchar()) != '\n')
{
printf("11: %c\n", ch);
if (ch >= 'a' && ch <= 'z')
{
printf("14: %c\n", ch);
printf("15: %c\n", 'a' + (ch - 'a' + 3) % 26);
putchar('a' + (ch - 'a' + 3) % 26);
continue;
}
if (ch >= 'A' && ch <= 'Z')
{
putchar('A' + (ch - 'A' + 3) % 26);
continue;
}
putchar(ch);
}
putchar('\n');
return 0;
}
$ gcc-debug -o main main.c
$ ./main
请输入明文:b
11: b
14: b
15: e
e
$
1613551
发表于 2022-4-12 14:28:41
人造人 发表于 2022-4-12 14:21
后面的!=0,其实我不是很懂!=0的概念,是!=0的时候为真吗?
等于和不等于么,就是一个反逻辑
你这代码我看不是很懂,也就是说如果一个数==0的时候为真,那么!=的时候就是这个数不等于0就为真
1613551
发表于 2022-4-12 14:30:34
人造人 发表于 2022-4-12 14:22
因为我没有按下回车也就是没有输出\n
输出?
是getchar没有得到 '\n'
感觉很奇怪,那我输入了b了,getchar()把值给b了,那么下面putchar为什么没有输出,而是等到得到了‘\n'以后puchar才输出
1613551
发表于 2022-4-12 14:31:15
人造人 发表于 2022-4-12 14:25
看看这个能不能看懂
好的,我看看
1613551
发表于 2022-4-12 14:35:52
人造人 发表于 2022-4-12 14:25
看看这个能不能看懂
我不是很理解加了一些printf上去有什么用吗
风车呼呼呼
发表于 2022-4-12 14:41:25
1613551 发表于 2022-4-12 14:23
感觉好奇怪,比如这个程序为什么我输入50就是输出了50,而不是按照ASCII码里50输出2
见我的第二段
getchar()是一次接收一个字符
不过里面有一点我没提到,字符常量赋值给一个整型变量时,是把该字符的ASCII码值赋给这个整型变量
你通过getchar()输入的都是字符 (型),而不是int之类的数字
你在while循环里的开头,if判断的前面,添加一条printf语句打印一下ch的值就知道的
1613551
发表于 2022-4-12 14:46:07
风车呼呼呼 发表于 2022-4-12 14:41
见我的第二段
getchar()是一次接收一个字符
不过里面有一点我没提到,字符常量赋值给一个整型变量时, ...
好的好的,我懂了,刚刚上了个厕所回来,我就想通了
1613551
发表于 2022-4-12 14:47:17
人造人 发表于 2022-4-12 14:25
看看这个能不能看懂
{:10_266:}把大佬都吓跑了,没事,估计我以后就懂了
风车呼呼呼
发表于 2022-4-12 15:12:01
1613551 发表于 2022-4-12 13:44
就比如小甲鱼的这个程序
当执行到这一步的时候为什么没有把值给输出出来呢?
我大概明白你想问的是什么了
你是想说,明明getchar()和putchar()都是一次只输入(输出)一个字符
但输出结果不是”键盘输入一个字符,就接着打印出一个字符“,而是”全部输入结束后,才一次性全部打印出来“
是这样吧
人造人
发表于 2022-4-12 15:24:05
1613551 发表于 2022-4-12 14:47
把大佬都吓跑了,没事,估计我以后就懂了
现在在外面
人造人
发表于 2022-4-12 15:31:22
1613551 发表于 2022-4-12 14:35
我不是很理解加了一些printf上去有什么用吗
输出在这个位置的时候ch变量中的值,让你更好的理解程序,这是调试程序的一种方法,用printf输出变量的值,输出表达式的值
1613551
发表于 2022-4-12 15:32:43
风车呼呼呼 发表于 2022-4-12 15:12
我大概明白你想问的是什么了
你是想说,明明getchar()和putchar()都是一次只输入(输出)一个字符
但输 ...
对对对,就是这个意思
1613551
发表于 2022-4-12 15:34:28
人造人 发表于 2022-4-12 15:31
输出在这个位置的时候ch变量中的值,让你更好的理解程序,这是调试程序的一种方法,用printf输出变量的值 ...
原来如此