因此,這是我第一次在這裏發帖,我會盡力確保儘可能具體。 我必須讓我的學校計劃,說:程序在關閉時崩潰
首先編寫一個函數,得到一個字符,並返回:
- 如果它是一個大寫字母相同的字符。
- 大寫字母,如果它是小寫字母。
- 反斜槓('\'),如果它是一個數字。
- 其他情況下的星號('*')。
然後,使用你的函數,讓一個程序得到一個字符串,並在函數改變它之後重新打印它。它應該繼續詢問一個新的字符串,直到用戶鍵入'QUIT',在這種情況下,將打印'再見!'然後退出。
這裏是我的代碼:
#include <stdio.h>
#include <stdlib.h>
char fnChange(char c)
{
if (c > 'a'-1 && c < 'z'+1)
c = c - 32;
else if (c > '0'-1 && c < '9'+1)
c = '\\' ;
else if (c > 'A'-1 && c < 'Z'+1)
c = c;
else
c = '*';
return c;
}
int main()
{
int i, refPoint;
char *str = (char*)malloc(10);
//without the next one, the program crashes after 3 repeats.
refPoint = str;
while (1==1) {
printf("Give a string: ");
str = refPoint;//same as the comment above.
free(str);
scanf("%s",str);
if (*str == 'Q' && *(str+1) == 'U' && *(str+2) == 'I' && *(str+3) == 'T') {
// why won't if (str == 'QUIT') work?
free(str);
printf("Bye!"); //after printing "Bye!", it crashes.
system("pause"); //it also crashes if i terminate with ctrl+c.
exit(EXIT_SUCCESS); //or just closing it with [x].
}
printf("The string becomes: ");
while (*str != '\0') {
putchar(fnChange(*str));
str++;
}
printf("\n");
}
}
'str = refPoint' ????? – 2014-09-03 09:05:55
'free(str)'然後'scanf(「%s」,str)'?????你到底想要發生什麼? – 2014-09-03 09:06:55
一個小點(你的代碼有*真正的問題,見下面的Joachim的答案),而不是'c>'a'-1',你應該寫'c> ='a''。或者,甚至更好,只需使用['islower()'](http://linux.die.net/man/3/islower)。 – unwind 2014-09-03 09:12:25