读取整个输入而不是单行
Reading whole input instead of single line
我编写了从小写字母变为大写字母的程序。问题是,我不知道如何让它读取整个文本而不是一行。按回车后程序 returns 输出,我希望它在 CTRL+Z 后这样做。
#include <stdlib.h>
#include <stdio.h>
void makeUpper(char *s) {
int i;
for(i = 0; s[i] != '[=10=]'; i++){
s[i] = toupper(s[i]);
}
printf("%s", s);
}
int main() {
char string[1000];
fgets(string, 1000, stdin);
makeUpper(string);
return 0;
}
fgets()
一遇到换行就停止。因此,您无法解决它以读取多行。所以,你必须考虑替代方案。
一种方法是使用 getchar()
是一个循环,只要缓冲区中有空间或收到 EOF 就读取。:
int main(void) {
char string[1000];
size_t i = 0;
do {
int ch = getchar();
if (ch == EOF) break;
string[i] = ch;
i++;
} while (i < sizeof string - 1);
string[i] = 0;
makeUpper(string);
return 0;
}
记住,ctrl+Z 作用于 Windows(发送 EOF)。在 *nix-like 系统上,您必须使用 Ctrl+D 来发送 EOF。
只要把你的fgets(string, 1000, stdin)
放到一段时间loop.here就是解决方案
#include <stdlib.h>
#include <stdio.h>
void makeUpper(char *s) {
int i;
for(i = 0; s[i] != '[=10=]'; i++){
s[i] = toupper(s[i]);
}
printf("%s", s);
}
int main() {
char string[1000];
while(fgets(string, 1000, stdin)!=NULL)//for getting input untill pressing CTRL+Z.
{
makeUpper(string);
}
return 0;
}
我编写了从小写字母变为大写字母的程序。问题是,我不知道如何让它读取整个文本而不是一行。按回车后程序 returns 输出,我希望它在 CTRL+Z 后这样做。
#include <stdlib.h>
#include <stdio.h>
void makeUpper(char *s) {
int i;
for(i = 0; s[i] != '[=10=]'; i++){
s[i] = toupper(s[i]);
}
printf("%s", s);
}
int main() {
char string[1000];
fgets(string, 1000, stdin);
makeUpper(string);
return 0;
}
fgets()
一遇到换行就停止。因此,您无法解决它以读取多行。所以,你必须考虑替代方案。
一种方法是使用 getchar()
是一个循环,只要缓冲区中有空间或收到 EOF 就读取。:
int main(void) {
char string[1000];
size_t i = 0;
do {
int ch = getchar();
if (ch == EOF) break;
string[i] = ch;
i++;
} while (i < sizeof string - 1);
string[i] = 0;
makeUpper(string);
return 0;
}
记住,ctrl+Z 作用于 Windows(发送 EOF)。在 *nix-like 系统上,您必须使用 Ctrl+D 来发送 EOF。
只要把你的fgets(string, 1000, stdin)
放到一段时间loop.here就是解决方案
#include <stdlib.h>
#include <stdio.h>
void makeUpper(char *s) {
int i;
for(i = 0; s[i] != '[=10=]'; i++){
s[i] = toupper(s[i]);
}
printf("%s", s);
}
int main() {
char string[1000];
while(fgets(string, 1000, stdin)!=NULL)//for getting input untill pressing CTRL+Z.
{
makeUpper(string);
}
return 0;
}