Итак, это мой первый пост, и я постараюсь быть настолько конкретным, насколько могу. я должен сделать программу для моей школы, которая говорит:сбой программ при закрытии
Сначала написать функцию, которая получает символ и возвращает:
- Тот же характер, если это верхний регистр букв.
- Письмо в верхнем регистре, если это нижний регистр.
- Обратная косая черта ('\'), если это число.
- Звездочка ('*') в любом другом случае.
Затем, используя вашу функцию, создайте программу, которая получит строку и перепечатает ее после ее изменения функцией. Он должен продолжать запрашивать новую строку, пока пользователь не наберет «QUIT», который в этом случае напечатает «Bye!». и затем уйти.
Вот мой код:
#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' ????? –
'free (str)', а затем 'scanf ("% s ", str)' ????? Что именно вы ожидаете? –
Небольшая точка (есть * реальные проблемы * с вашим кодом, см. Ответ Йоахима ниже), вместо 'c> 'a'-1' вы действительно должны написать' c> =' a''. Или, еще лучше, просто используйте ['islower()'] (http://linux.die.net/man/3/islower). – unwind