#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函数从用户获取一个char和number, 用户输入的数字是字母和行的数量 打印到输出。
因此,如果用户输入了&#39;和号码&#39; 3&#39;输出是abc \ n bcd \ n cde 我在主要验证方面遇到问题。使用函数isalpha() 检查返回值是否为0,如果是,则继续提示用户输入char 我尝试为isdigit()做同样的事情,但它进入了一个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;
}
}
答案 0 :(得分:3)
您的代码中有未定义的行为。您告诉scanf
读取字符串,但只提供指向单个字符的指针。非空字符串至少有两个字符:字符串中的实际字符加上字符串终止符。
当scanf
写入字符串终止符时,它将写入内存中不应写入的位置。
要阅读单个字符,您应使用"%c"
格式。参见例如this scanf
(and family) reference了解有关格式的更多信息。
答案 1 :(得分:0)
isdigit
检查您的输入是char
:'0'
,'1'
,...
它不会检查您的输入是否为integers
。请注意,char '0'
与int 0
不同。
此外,您应该使用scanf("%c",&userChar);
代替scanf("%s",&userChar);
,因为userChar
是一个字符,而不是字符串。