# 410
```
410
請撰寫一程式,讓使用者輸入一個正整數,並讀取read.txt檔案內容,read.txt檔案中包含多列英文句子。若輸入值為n,則讀取n列read.txt檔案內容,將n列中的每個英文單字字首轉為大寫再輸出,並寫入至write.txt檔案。
輸入說明 一個正整數n,並讀取read.txt檔案內容
輸出說明 將n列中的每個英文單字字首轉為大寫再輸出,並寫入至write.txt檔案
範例輸入 5
範例輸出
Hello World!
What Is The Weather Like Out There?
Are You Ok?
What's Today's Date?
Excuse Me!
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LEN 100
void Capitalized(char *s, char *output);
int main()
{
int n;
scanf("%d", &n);
FILE *fin = fopen("read.txt", "r");
FILE *fout = fopen("write.txt", "w");
char buf[LEN];
char output[LEN] = {'\0'};
//fscanf(fin, "%[^\n]%*c", buf); //%*[^\n]%*c
for (int i=0; i<n; ++i)
{
fgets(buf, LEN, fin); //從fin最多取LEN個字元(包含'\0')到buf
Capitalized(buf, output);
printf("%s", output);
fputs(output, fout);
memset(output,0,LEN);
}
//while (fgets(buf, sizeof(buf), fin) )
//while (fgets(buf, LEN, fin) )
fclose(fin);
fclose(fout);
}
void Capitalized(char *s, char *output)
{
for (int i=0; i<strlen(s); ++i)
{
if (s[0] != ' ')
s[0]-=32;
if (s[i] == ' ')
s[i+1]-=32;
output[i] = s[i];
}
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LEN 1024
void Capitalized(char *s, char *output);
int main()
{
int n;
scanf("%d", &n);
FILE *fin = fopen("read.txt", "r");
FILE *fout = fopen("write.txt", "w");
char buf[LEN];
char output[LEN] = {'\0'};
for (int i=0; i<n; ++i)
{
//跳過前n行
fscanf(fin, "%[^\n]%*c", buf); //%*[^\n]%*c
//fscanf(fin, "%*[^\n]%*c");
}
//while (fgets(buf, sizeof(buf), fin) )
while (fgets(buf, LEN, fin) ) //從fin最多取LEN個字元到buf
{
Capitalized(buf, output);
printf("%s", output);
fputs(output, fout);
memset(output,0,LEN);
}
fclose(fin);
fclose(fout);
}
void Capitalized(char *s, char *output)
{
int len=strlen(s);
for (int i=0; i<len; ++i)
{
if (s[0] != ' ')
s[0]-=32;
if (s[i] == ' ')
s[i+1]-=32;
output[i] = s[i];
}
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LEN 1024
void Capitalized(char *s, char *output);
int main()
{
int n;
scanf("%d", &n);
FILE *fin = fopen("read.txt", "r");
FILE *fout = fopen("write.txt", "w");
char buf[LEN];
char output[LEN] = {'\0'};
for (int i=0; i<n; ++i)
{
fscanf(fin, "%[^\n]%*c", buf); //%*[^\n]%*c
Capitalized(buf, output);
printf("%s\n", output);
fputs(output, fout);
memset(output,0,LEN);
}
//while (fgets(buf, sizeof(buf), fin) )
fclose(fin);
fclose(fout);
}
void Capitalized(char *s, char *output)
{
int len=strlen(s);
for (int i=0; i<len; ++i)
{
if (s[0] != ' ')
s[0]-=32;
if (s[i] == ' ')
s[i+1]-=32;
output[i] = s[i];
}
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LEN 1024
void Capitalized(char *s, char *output);
int main()
{
int n;
scanf("%d", &n);
FILE *fin = fopen("read.txt", "r");
FILE *fout = fopen("write.txt", "w");
char buf[LEN];
char output[LEN] = {'\0'};
for (int i=0; i<n-1; ++i)
{
fscanf(fin, "%[^\n]%*c", buf); //%*[^\n]%*c
Capitalized(buf, output);
printf("%s\n", output);
fputs(output, fout);
memset(output,0,LEN);
}
fscanf(fin, "%[^\n]", buf); //%*[^\n]%*c
buf[strlen(buf)-1] = '\0';
Capitalized(buf, output);
printf("%s", output);
fputs(output, fout);
//memset(output,0,LEN);
//while (fgets(buf, sizeof(buf), fin) )
fclose(fin);
fclose(fout);
}
void Capitalized(char *s, char *output)
{
int len=strlen(s);
for (int i=0; i<len; ++i)
{
if (s[0] != ' ')
s[0]-=32;
if (s[i] == ' ')
s[i+1]-=32;
output[i] = s[i];
}
}
"%n[a-z]" 读入最多n个字符,如果遇到非a-z的字符,停止
"%[^=]" 读入任意多的字符,直到遇到"="停止
对scanf(“%*[^\n]%*c”)解释:
%〔^\n〕将逐个读取缓冲区中的’\n’字符之前的其它字符,%后面的*表示将读取的这些字符丢弃,前遇到’\n’字符时便停止读取操作,此时,缓冲区中尚有一个’\n’字符遗留,所以后面的%*c将读取并丢弃这个遗留的换行符,这里的星号和前面的星号作用相同。由于所有从键盘的输入都是以回车结束的,而回车会产生一个’\n’字符,所以将’\n’连同它之前的字符全部读取并丢弃之后,也就相当于清除了输入缓冲区。
https://blog.csdn.net/Veniversum/article/details/62048870
```