我编写的程序从小写字母变为大写。问题是,我不知道如何使它读取整个文本而不是一行。按Enter键后程序返回输出,我希望它在CTRL + Z之后返回。
#include <stdlib.h>
#include <stdio.h>
void makeUpper(char *s) {
int i;
for(i = 0; s[i] != '\0'; i++){
s[i] = toupper(s[i]);
}
printf("%s", s);
}
int main() {
char string[1000];
fgets(string, 1000, stdin);
makeUpper(string);
return 0;
}
答案 0 :(得分:3)
将你的fgets(string, 1000, stdin)
放入while循环中。这是解决方案
#include <stdlib.h>
#include <stdio.h>
void makeUpper(char *s) {
int i;
for(i = 0; s[i] != '\0'; 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;
}
答案 1 :(得分:2)
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的系统上,您必须使用Ctrl + D发送EOF。