所以我在我的大学上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)?我知道第二个与标题并没有真正的联系,但我感谢您的回答,所以谢谢!
您提到的127。在任何地方,您都会发现char的范围是-127到128。这并不意味着您可以在其变量中存储127个字符,而是意味着您可以在其变量中存储256种字符。了解有关ASCII值的更多信息。每个字符都有一个与之关联的ASCII值,因为字符在内部表示为整数。
阅读有关ASCII值的更多信息您可以参考这些文章
https://www.cs.cmu.edu/~pattis/15-1XX/common/handouts/ascii.html
https://www.atnyla.com/tutorial/char-data-type-in-c/1/178
2。关于句号在循环条件下,您有
while( c != '.' ){
scanf("%c", &c);
printf("%c", c);
}
您的程序将打印句号因为从一边看
FOCUS现在,c变量的值为'c'。不是 '。'循环条件“ c”不等于“。”循环将执行它将使用scanf输入现在您输入了“。”即c为'。'现在enter code here
它将转到下一行并打印c,即“。”然后将再次检查c是否等于'。因此循环将终止
我希望可以解释您为什么得到。在输出中
[是的,类型为char
的变量可以容纳一个字符。它绝对不能容纳多个字符的字符串。
但是此程序不必包含多个字符的字符串。它读取并打印字符,然后读取并打印字符,等等。
[If您正在使用scanf %s
读取和存储整个字符串,并使用printf %s
打印该字符串,那么,是的,您需要一个包含多个字符的数组。
根据您编写循环的方式,我希望它打印出'.'
,然后停止。仔细地遵循它:在循环中,它读取一个字符,并打印该字符,然后从循环中“返回顶部”,以决定是否应该再次循环。 (这是while
循环的工作方式。)在读取并打印'.'
后,条件while(c != '.')
不再为真,因此循环停止-到那时,'.'
已被打印。您的编译器没有任何问题。
您提到char
升至127。实际上,一个8位char
可以容纳2 8 = 256个不同的值。我们可以认为这些值的范围是-128到+127(如果char
是有符号类型)或0到255(如果char
是无符号类型)。普通ASCII字符的值始终小于128,因此表示这些字符不会有任何问题。其他128个值可以根据机器的字符集和编码以不同的方式使用。