#include<stdio.h> #include<string.h> int main() { char s[20]; scanf("%s",&s); int i; for(i=0; s[i]!='\0';i++) if( s[i]>'a'&&s[i]<'z') s[i]=s[i]+26; printf("%c",s) ; }有什么问题
时间: 2024-03-11 16:47:18 浏览: 128
2023自学C语言学习笔记
这段代码有几个问题:
1. 在使用`scanf`读取字符串时,应该使用`s`而不是`&s`,因为数组名`s`本身就代表了数组的地址。
2. 在处理字符时,应该使用单引号`'`而不是双引号`"`,因为双引号表示字符串,单引号表示字符。
3. 在输出字符时,应该使用`printf("%c", s[i])`而不是`printf("%c", s)`,因为`s`是一个字符串,而我们需要逐个输出每个字符。
4. 在对小写字母进行处理时,应该使用大写字母进行替换,而不是在原有的基础上加上26,因为这样处理后的字符可能不是一个合法的ASCII码,导致输出结果不正确。
5. 程序缺少`return 0;`语句。
下面是修改后的代码:
```c
#include <stdio.h>
#include <string.h>
int main() {
char s[20];
scanf("%s", s);
int i;
for (i = 0; s[i] != '\0'; i++) {
if (s[i] >= 'a' && s[i] <= 'z') {
s[i] = 'A' + (s[i] - 'a');
}
printf("%c", s[i]);
}
printf("\n");
return 0;
}
```
阅读全文