void capitalization(FILE *p)
{
char array[100] = { 0 };
char str[100] = { 0 };
while (!feof(p))
{
fgets(array, sizeof(array), p);
for (int i = 0; i < strlen(array); i++)
{
if ((isalpha(array[i])))
{
str[i] = toupper(array[i]);
}
else
{
str[i] = array[i];
}
}
printf(“%s”, str);
}
}
;
循环一次就谈出来!可以点忽略,但是不清楚为什么会这样,找不到原因 求帮看看!
{
char array[100] = { 0 };
char str[100] = { 0 };
while (!feof(p))
{
fgets(array, sizeof(array), p);
for (int i = 0; i < strlen(array); i++)
{
if ((isalpha(array[i])))
{
str[i] = toupper(array[i]);
}
else
{
str[i] = array[i];
}
}
printf(“%s”, str);
}
}
;
循环一次就谈出来!可以点忽略,但是不清楚为什么会这样,找不到原因 求帮看看!
解决方案
10
其实本人也遇到过这个问题,可能是微软库的bug吧。isalpha((unsigned char)array[i])
应该就可以了。应该是你传入的字符有非ASCII字符,所以超过了127。由于MS的实现char是signed的。所以就整形提升以后就成了负数了。
应该就可以了。应该是你传入的字符有非ASCII字符,所以超过了127。由于MS的实现char是signed的。所以就整形提升以后就成了负数了。
10
点重试——中断,断下后通过调用堆栈、变量窗口观察分析原因
20
1 #include <stdio.h>
1 #include <ctype.h>
2 #include <string.h>
3
4 void capitalization(FILE *p);
5
6 int main(void)
7 {
8 FILE *fp = fopen("1.txt", "r");
9 if (NULL == fp) {
10 | fprintf(stderr, "Open %s Error", "1.txt");
11 | return -1;
12 }
13 capitalization(fp);
14 return 0;
15 }
16
17
18
19
20 void capitalization(FILE *p)
21 {
22 int i;
23 char array[100] = { 0 };
24 char str[100] = { 0 };
25
26 while (!feof(p))
27 {
28 | fgets(array, sizeof(array), p);
>> 29 | for (i = 0; i < strlen(array); i++)
30 | {
31 | | if ((isalpha(array[i])))
32 | | {
33 | | | str[i] = toupper(array[i]);
34 | | }
35 | else
36 | {
37 | | str[i] = array[i];
38 | }
39 }
40 printf("%s", str);
41 }
42 }
在Linux下测试了一下你的代码,没发现问题;本人打开的文件里的数据要么是26个英文字符,要么是数字;可以将字母小写变大写,其他不变;
建议题主查看一下要打开的文件;