【发布时间】:2019-10-02 15:14:36
【问题描述】:
所以我正在我的大学学习 C 语言,教授展示了这段简单的代码:
#include <stdio.h>
int main() {
char c;
scanf("%c", &c);
while (c !='.'){
//if(c != '/n');
scanf("%c", &c);
printf("%c", c);
}
return 0;
}
虽然对于你们中的许多人来说,这是一段客观上简单的代码,但我无法理解两件事。第一件事是,如果您运行代码,我可以存储整个字符串(通过写入scanf())并将代码吐回给我。但是我存储它的变量是一个类型char,它只上升到127,它基于我输入的字符的ASCII值,还不够,那么它是如何存储的呢?
其次,我正在从内存中编写此代码(尽管我认为它与我的教授使用的代码完全相同)。但是,在他的代码中,程序在检测到句号“。”后停止,并且程序在不打印点的情况下打印其最终字符串,但我的却是。我想知道是不是写错了,或者我的编译器有问题(Clion,Mac上的lang)?
我知道第二个与标题并没有真正的关系,但我感谢答案,所以谢谢!
【问题讨论】:
-
我建议您将
printf行更改为printf("%d\n", c);,这样您就可以看到实际值而不会被空格误导。 -
代码不读取或打印字符串。它读取并打印单个字符。
-
此外,当今使用的几乎所有系统都使用ASCII 编码字符,而ASCII 是7 位编码(值从
0到127)。所以它非常适合(签名)char。 -
如果你的程序表现得不像教授的那样,那就不一样了。请注意,在循环中,您暂时在 之前输出字符,下一个循环的
while测试找到'.'。还要注意,您永远不会输出循环外的第一个scanf的结果。我建议你将printf上移一行。 -
我将如何更改它以使代码结束并且不打印出'。'最后?