我创建了一个c程序来打印所有可能的8个字符的字符串。但是程序中的printf()函数根本不起作用。这是程序
#include <stdio.h>
#include <string.h>
#include <conio.h>
void ini(void);
void check(void);
void add(void);
static char str[9]; //permuting string
static char test[9]; //test string
static short int c = 1;
void print(char*);
void print(char a[]) {
short int i,ln = (int)(strlen(str)-1);
for(i = 0; i <= ln; i++)
printf("%c",a[i]);
printf("n");
}
void ini() {
//initialzing the strings.
short int i = 0;
for(i = 0; i < 9; i++){
str[i] = 'A';
test[i]= 'z';
}
puts("ini.....");
//initializing done
}
void check() {
//check if the strings 'str' and 'test' are equal
c = strcmp(str, test);
puts("checking..........");
}
void add() {
//this is the heart of the program
short int i = 0;
for( i = 7; i > 0; i--)
{
if((int)str[i] >= (int)'z') {
str[i] = 'A';
str[i-1]++;
}
else if(str[i] < 'z'){
str[i]++;
break;
}
}
puts("adding.......");
}
int main() {
//now we execute the functions above
puts("in main.....");
int i = 0;
while( c != 0 ) //execute the loop while the permuting string 'str' is not equal to the final string 'test'
{
puts("inside while.......");
for(i = 65; i <= 122; i++) { //loop to make the last character of 'str' permute from 'a' to'Z'
str[7] = (char)i;
puts("inside for");
print(str); //print the whole string to the screen
}
add(); //change the next char
check(); //check to see if 'str' has reached it's final point.
}
return 1;
getch();
}
这里的结果是.............
程序在main()中输入for循环,但它不执行print()函数。我尝试过printf(),但显示了相同的结果。我做错了什么?
答案 0 :(得分:0)
你贬低了,
static char str[9];
因此,str
中的所有元素现在都是NULL
(\0
)。然后,
ln = (int)(strlen(str)-1);
此处,strlen
计算字符直到找到\0
。因此,str
中的第一个字符是\0
,ln
将是-1
。在for loop
,
for(i = 0; i <= ln; i++)
i <= ln
条件将失败。
您可以尝试使用main
功能
str[0] = (char) i;
或者,在致电ini()
print(str);
但是小心,你的while loop
永远不会破裂!由于c
永远不会0
因为您的代码没有将第9个字符从A
更改为z
所以strcmp(str,test)不会转到return 0
。
答案 1 :(得分:0)
在您的情况下,str
是一个全局静态数组,所有元素都初始化为0.
接下来,在您的代码中,您只需设置索引7并尝试将数组传递给print()
函数。但事实是,第一个元素是null
(NOte:不是NULL
,null
是0
或'\0'
。因此,strlen()
内print()
的调用将返回0
。因此,即时printf()
将不会打印任何内容。
那就是说,我想,下一个printf()
你打算写成printf("\n");
TL; DR解决方案:您在ini()
开始时错过了对main()
的来电,请添加。
答案 2 :(得分:0)
看起来我没有从main()调用ini()函数。调用它将初始化字符串,以便将空字节移动到结尾。之后程序运行得很好。所以问题已经结束了。