#include <stdio.h>
#include <ctype.h>
void printSquare( char c, int size);
int main(){
int userNum;
char userChar;
printf("Enter a character : \n");
scanf("%s",&userChar);
while(isalpha(userChar) == 0){
printf("Enter a character : \n");
scanf("%s",&userChar);
}
printf("Enter a number(3-10) : \n");
scanf("%d",&userNum);
while(isdigit(userNum) == 0){
printf("Enter a number(3-10) : \n");
scanf("%d",&userNum);
}
printSquare(userChar,userNum);
}
/*printSquare函数从用户获得一个字符和数字,用户输入的数字是打印输出的字母和行数。
因此,如果用户输入'a‘和'3’输出是abc \n bcd \n cde,则主要在验证方面有问题。使用函数isalpha()检查返回值是否为0,如果是,则继续提示用户使用char,我试图对is位数()执行相同的操作,但是它进入了infite循环,以前有人见过它吗,它与缓冲区或stdin有关吗?*/
void printSquare( char c, int size){
char letters[27] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
int initChar;
for (int i = 0; i < sizeof(letters)/sizeof(letters[i]); i++)
{
if (c == letters[i])
{
initChar = i;
printf("FOUND IT - > %c\n",letters[i]);
}
}
for (int i = 0; i < size; i++)
{
for (int j = initChar; j < initChar + size; j++)
{
printf("%c",letters[j % 27] );
}
printf("\n");
initChar+=1;
}
}
发布于 2016-03-07 04:52:09
代码中有未定义的行为。您告诉scanf
读取字符串,但只提供指向单个字符的指针。非空字符串至少是两个字符:字符串中的实际字符加上字符串终止符。
当scanf
写入字符串终止符时,它将在内存中的某个不应该写入的地方写入。
若要读取单个字符,应使用"%c"
格式。有关格式的更多信息,请参见 (and family) reference。
发布于 2016-03-07 04:51:45
isdigit
检查您的输入是否为char
:'0'
、'1'
、.
它不检查输入是否为integers
。请注意,char '0'
与int 0
不同。
另外,您应该使用scanf("%c",&userChar);
而不是scanf("%s",&userChar);
,因为userChar
是一个字符,而不是字符串。
https://stackoverflow.com/questions/35836324
复制相似问题