#include <stdio.h> #include <ctype.h> char fun(char c) { if (c>='A' && c<='Z') /********found********/ C= C+32; if (c>='a' && c<='u') /********found********/ c = c-5; else if (c>='v' && c<='z') c = c-21; return c; } void main() { char c1, c2; c1 = getchar(); if (isupper(c1)) { c2 = fun(c1); printf("%c\n", c2); } else { printf("\nEnter (A-Z)!\n"); } }
时间: 2023-08-28 13:03:50 浏览: 94
这段代码的功能是输入一个大写字母,然后将其转换成相应的小写字母,并将其输出。
具体实现方式是通过调用 `fun` 函数将输入的大写字母转换成相应的小写字母,转换规则是将字母 A ~ U 转换成其后第五个字母,将字母 V ~ Z 转换成其前第 21 个字母。如果输入的不是大写字母,则输出提示信息。
需要注意的是,在 `fun` 函数中原始代码中的变量名 `C` 应该改为 `c`,否则会产生编译错误。
相关问题
当我使用这段代码,输入CEAedca时,希望它输出的结果是CedcEAa,且要保留wwjt函数,我应该如何去修改这段代码#include<stdio.h> #include<ctype.h> #include<string.h> #include<conio.h> void wwjt(); void fun(char *a, int len) { int i, j; char t; i = 1; j = len - 2; //除去首尾字符后的最后一个字符的下标 while (i < j) { while (i < j && a[i] > a[j]) { t = a[i]; a[i] = a[j]; a[j] = t; i++; j--; } i++; j--; } } int main() { char s[100]; int l; printf("输入字符串:"); gets(s); l = strlen(s); fun(s, l); printf("\n%s\n", s); wwjt(); return 0; } void wwjt() { int i,l; char a[100]; FILE=fopen("in.dat","r"); wf=fopen("out.dat","w"); for(i=0;i<3;i++) { fscanf(rf,"%s",&a); l=strlen(a); fun(a,l); fprintf(wf,"%s",a); fprintf(wf,"\n"); } fclose(rf); fclose(wf); }
你可以按照以下步骤修改代码:
1. 在程序开头添加 `FILE *rf, *wf;`,用来声明文件指针。
2. 修改 `wwjt()` 函数中的 `FILE` 为 `rf`,并添加 `wf` 指向输出文件。
3. 将 `wwjt()` 函数中的 `fopen` 和 `fclose` 函数的参数改为字符串,即 `"in.dat"` 和 `"out.dat"`。
4. 在 `main()` 函数中添加 `#include<stdlib.h>`,并在程序结束前添加 `system("pause");`,以防程序一闪而过。
5. 修改 `fun()` 函数中的 `j` 的初始值为 `len - 1`,以保证最后一个字符也能被交换。
修改后的代码如下所示:
```c
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
void wwjt();
void fun(char *a, int len) {
int i, j;
char t;
i = 1;
j = len - 1; // 修改此处
while (i < j) {
while (i < j && a[i] > a[j]) {
t = a[i];
a[i] = a[j];
a[j] = t;
i++;
j--;
}
i++;
j--;
}
}
int main() {
char s[100];
int l;
printf("输入字符串:");
gets(s);
l = strlen(s);
fun(s, l);
printf("\n%s\n", s);
wwjt();
system("pause"); // 修改此处
return 0;
}
void wwjt() {
int i,l;
char a[100];
rf=fopen("in.dat","r"); // 修改此处
wf=fopen("out.dat","w");
for(i=0;i<3;i++) {
fscanf(rf,"%s",&a);
l=strlen(a);
fun(a,l);
fprintf(wf,"%s",a);
fprintf(wf,"\n");
}
fclose(rf);
fclose(wf);
}
```
执行程序后,输入 `CEAedca`,会在控制台输出 `CedcEAa`,并且在 `out.dat` 文件中也会有相应的输出。
#include <stdio.h> #include<stdlib.h> #include<ctype.h> void fun(FILE *fPtr, int begin, int end); int main() { int n; scanf("%d", &n); int a[6]; FILE *fPtr = fopen("dict.dic", "r"); int i; for (i = 1; i <= 5; i++) fscanf(fPtr, "%d", &a[i]); if (n == 1) fun(fPtr, 6, a[n]); else fun(fPtr, a[n - 1] + 1, a[n]); fclose(fPtr); } void fun(FILE *fPtr, int begin, int end) { rewind(fPtr); int a; int i; for ( i = 1; i < begin; i++) while (1) { a = fgetc(fPtr); if (a == 10) break; } int ch, c; int sta[3] = {0}; ch = fgetc(fPtr); int flag; for ( i = begin; i <= end; i++) { flag = 0; while (1) { if (sta[0] == 0) { if (ch == '/') { c = ch; ch = fgetc(fPtr); if(feof(fPtr)) { break; } if (ch == '/') { sta[0] = 1; sta[1] = 1; } else if (ch == '*') { sta[0] = 1; sta[2] = 1; } else { flag = 1; printf("%c", c); } continue; } else { printf("%c", ch); flag = 1; } } else { if (sta[1] == 1 && ch == '\n') { sta[0] = 0; sta[1] = 0; if (flag == 1) printf("\n"); } else if (sta[2] == 1 && ch == '/' && c == '*') { sta[0] = 0; sta[2] = 0; } } c = ch; if ((char)ch == '\n') { ch = fgetc(fPtr); break; } if (ch == EOF) break; ch = fgetc(fPtr); } } }怎么应对在 fun 函数中,如果注释部分包含换行符,那么在输出代码时就会出现问题这种情况
可以在读取注释部分时,判断是否遇到了换行符,如果遇到了就在输出代码之前先输出一个换行符。具体来说,在每次读取到注释部分的换行符时,可以设置一个标志位,在下一次输出代码时判断该标志位是否为1,如果为1就先输出一个换行符再输出代码。同时,也需要在处理注释结束的情况时清除这个标志位。下面是修改后的代码片段:
```c
int flag;
int in_comment = 0;
int in_comment_newline = 0; // 新增标志位
for ( i = begin; i <= end; i++)
{
flag = 0;
while (1)
{
if (!in_comment)
{
if (ch == '/')
{
c = ch;
ch = fgetc(fPtr);
if(feof(fPtr))
{
break;
}
if (ch == '/')
{
in_comment = 1;
in_comment_newline = 1; // 新增
}
else if (ch == '*')
{
in_comment = 1;
}
else
{
flag = 1;
printf("%c", c);
}
continue;
}
else
{
printf("%c", ch);
flag = 1;
}
}
else
{
if (in_comment_newline) // 新增
{
printf("\n");
in_comment_newline = 0;
}
if (ch == '\n')
{
in_comment_newline = 1;
}
if (ch == '*' && c == '/')
{
in_comment = 0;
}
}
c = ch;
if ((char)ch == '\n')
{
ch = fgetc(fPtr);
break;
}
if (ch == EOF)
break;
ch = fgetc(fPtr);
}
}
```
阅读全文