【发布时间】:2016-03-03 17:21:19
【问题描述】:
这里有什么问题?
我想检查 char 数组中的 char 是否小写,如果是小写,应该改成大写。
#include <stdio.h>
int main(int argc, char *argv[]) {
char arr[100];
scanf("%s",&arr);
for(int i=0;i<sizeof(arr);i++){
if(int islower(arr[i])){
arr[i] = toupper(arr[i]);
}
}
printf("%s",arr);
return 0;
}
【问题讨论】:
-
不需要先测试是否小写。
toupper除非有事可做,否则不会做任何事。 -
语法是怎么回事:
if(int islower(arr[i]))...?为什么是int?另外,请注意toupper如果没有大写等效项,将再次返回相同的字符(请阅读文档!)。所以你根本不需要if语句。 -
你的代码有什么问题?什么不起作用?
-
您正在访问数组的未初始化元素。您应该将循环限制为
strlen(arr),而不是sizeof(arr)。 -
使用
scanf("%s", &arr);在三个方面是错误的:(1)你应该限制输入("%99s"),(2)你不应该使用&,因为它传递了一个char (*)[100],其中char *是预期的,并且 (3) 在使用结果之前,您应该检查scanf()报告的返回值是否为 1。