提问人:programmeurNED 提问时间:5/14/2020 最后编辑:RobertS supports Monica CellioprogrammeurNED 更新时间:5/14/2020 访问量:264
C 初学者 for 循环输出问题
C beginner for-loop output issue
问:
我是C(自学)的新手。 当我执行这个for循环函数时,当我输入“hello”时,输出将是012345。但是,它会跳到 for 循环之外的最后一个打印功能?
int main() {
int c;
for (c = 0; getchar() != EOF; ++c) {
printf("%d\n", c);
}
printf("%d\n", c);
return 0;
}
输出:
hello
0
1
2
3
4
5
答:
不,它没有跳过任何东西。
注意:您正在打印整数(不是字符,如果这是您想要的)。因此,输入有 5 个字符:因此,输出为:c
"hello"
0
1
2
3
4
然后,由于您按下时有换行符(有您的输出)。但是,除非您强制程序这样做(我的意思是,用 Ctrl +C 中断),否则 you loop 永远不会退出。如果你,再次测试你的代码,并输入数据,即使在 之后,你会看到,你仍然在循环中。'\n'
enter
5
"hello"
评论
将您的程序更改为:
#include <stdio.h>
int main() {
int c;
int ch;
for (c = 0; (ch = getchar()) != EOF; ++c) {
printf("%d %d\n", c, ch);
}
printf("%d %d\n", c, ch);
return 0;
}
现在你应该了解自己发生了什么。
评论
"当我执行这个
for
循环函数并键入'hello'
时,输出将是012345
”。
你还有什么期待? 只需从 开始每次迭代都会递增。c
0
"但是,它会跳到
for
循环之外的最后一个打印功能?"
不,它没有。事实上,它甚至没有脱离循环。按压机制作的换行符不会让你跳出循环;只有信号化的人才能做到这一点。for
Enter
EOF
因此,该程序甚至没有终止。它卡在循环中。
您需要在 Linux 或 Windows 上发出信号才能跳出循环。EOF
CTRL + D
CTRL + Z
评论
EOF
CTRL + D
CTRL + Z
我明白你在尝试做什么,但首先我会声明“c”为字符,这样你就是在对字符进行隐式转换,这在 C 语言中是允许的,但应该避免。
我最好的猜测是你的编译器(我想 mingw 在 Windows 上)没有告诉你到底发生了什么,试试这个:
当你在 Linux 之外为 C 语言构建(编译)一些东西时,请执行以下操作:
“ gcc -o nameoftheexecutable file.c -Wall ” 并执行它 “ ./nameoftheexecutable
该 -Wall 将打印出控制台的所有警告,包括 EOF 警告。
通过这样做,并了解您正在编写的IDE或环境,我们可以为您提供帮助。
当您键入并按 Enter 键时,while 循环不会结束,因为 still 不会等于 。因此,循环将继续使用 getchar() 等待读取新字符。hello
getchar()
EOF
您需要在 Windows 的 cmd(phrasefix).exe 上按 Ctrl+Z,或在 Linux 的终端上按 Ctrl+D,以继续执行程序而不向输入写入任何字符,然后无法读取字符并返回,最后退出循环。一旦它脱离循环,将在结束程序之前进行最后一次调用。getchar
EOF
printf
或者,您可以更改条件,使循环在读取新行字符时结束,而不是在无法读取字符时结束,这样循环将在按 Enter 键后结束:getchar
\n
int main() {
int c;
for (c = 0; getchar() != '\n'; ++c) {
printf("%d\n", c);
}
printf("%d\n", c);
return 0;
}
评论
EOF
Ctrl+C
[h]
[e]
[l]
[l]
[o]
[Enter]
printf("and finally %d\n", c);