1.1 while 循环
break--永久的终止循环 | Continue--跳过本次循环后面的代码,直接判断要不要进行下一次循环。 |
int main() { int i = 1; while (i <= 10) { if (i == 5) { break; //不论break放在哪里,它都是用来跳出循环的。 } printf("%d\n", i); i++; } return 0; } | int main() { int i = 1; while (i <= 10) { if (i == 5) { continue; } printf("%d\n", i); i++; } return 0; } |
1.2 getchar 和 gets 和 scanf 区别
1.getchar函数:
- getchar函数用于从标准输入(键盘)读取一个字符。
- 它的原型为:int getchar(void)。
- 返回值为读取的字符的ASCII码值(整数类型)。
- 注意:getchar函数每次只能读取一个字符,遇到换行符或文件结束符时停止读取。
2.gets函数:
- gets函数用于从标准输入(键盘)读取一行字符串。
- 它的原型为:char *gets(char *str)。
- 返回值为读取的字符串的地址(指针类型)。
- 注意:gets函数不会检查输入字符串的长度,容易导致缓冲区溢出,因此不推荐使用。
3.scanf函数:
- scanf函数用于从标准输入(键盘)按照指定格式读取数据。
- 它的原型为:int scanf(const char *format, …)。
- 返回值为成功匹配并赋值的输入项个数(整数类型)。
- 注意:scanf函数可以根据指定的格式读取不同类型的数据,如整数、浮点数、字符等。
总结一下它们的区别:
- getchar函数用于读取单个字符,gets函数用于读取一行字符串,scanf函数可以根据指定格式读取不同类型的数据。
- gets函数存在安全性问题,容易导致缓冲区溢出,不推荐使用。
- scanf函数需要指定格式,可以更灵活地读取不同类型的数据。
1.3 EOF 解释
EOF是英文End of File的缩写,表示文件结束符。在文件读取过程中,当读取到文件末尾时,会返回一个特殊的值EOF,用于表示文件已经读取完毕。
EOF在C语言中被定义为一个常量,其值为-1。当使用标准库函数如fgetc()、fgets()等读取文件时,如果读取到文件末尾,这些函数会返回EOF作为结束标志。
EOF的使用可以帮助我们判断文件是否已经读取完毕,从而避免读取过程中出现错误。通常的做法是使用一个循环来读取文件,直到读取到EOF为止。
举例:
假设设置一串密码,密码为字符串 |
int main() { char password[20] = { 0 }; printf("请输入密码:"); scanf_s("%c", password); //password本身就是地址,不需要&。 //getchar();//读取了\n int ch = 0; while ((ch = getchar()) != '\n') { ; } printf("请确认密码(Y/N):"); int ret = getchar(); if ('Y' == ret) { printf("yes\n"); } else { printf("no\n"); } return 0; }
|
1.4while ((ch = getchar()) != EOF)
这是一个C或C++语言中的while循环语句,用于从标准输入(通常是键盘)读取字符,直到遇到文件结束符(EOF)为止。
下面是对这个语句的逐步解释:
- getchar(): 这是一个标准库函数,用于从标准输入(stdin)读取一个字符。
如果读取成功,它返回读取的字符的ASCII码值;如果读取失败或达到文件末尾,它返回EOF。
- ch = getchar(): 这将getchar()函数的返回值赋值给变量ch。
这样,ch将存储从输入读取的每个字符的ASCII码值。
- while ((ch = getchar()) != EOF): 这是一个while循环,它会反复执行其循环体,直到getchar()返回EOF.
在每次循环迭代中,它会从输入中读取一个字符,并将其存储在ch中,然后检查该字符是否是文件结束符(EOF)。
这个循环通常用于逐行读取输入,直到到达文件末尾。
例如 |
int main() { char ch; while ((ch = getchar()) != EOF) { putchar(ch); // 输出读取的字符 } return 0; } |
这个程序将从标准输入读取字符,并将它们输出到标准输出(通常是屏幕),直到遇到文件结束符(EOF)。