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个英文字符,要么是数字;可以将字母小写变大写,其他不变;
建议题主查看一下要打开的文件;