printf()函数不起作用

时间:2015-06-24 05:53:35

标签: c++ c

我创建了一个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();
}

这里的结果是.............

enter image description here

程序在main()中输入for循环,但它不执行print()函数。我尝试过printf(),但显示了相同的结果。我做错了什么?

3 个答案:

答案 0 :(得分:0)

你贬低了,

static char str[9]; 

因此,str中的所有元素现在都是NULL\0)。然后,

ln = (int)(strlen(str)-1);

此处,strlen计算字符直到找到\0。因此,str中的第一个字符是\0ln将是-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:不是NULLnull0'\0'。因此,strlen()print()的调用将返回0。因此,即时printf()将不会打印任何内容。

那就是说,我想,下一个printf()你打算写成printf("\n");

TL; DR解决方案:您在ini()开始时错过了对main()的来电,请添加。

答案 2 :(得分:0)

看起来我没有从main()调用ini()函数。调用它将初始化字符串,以便将空字节移动到结尾。之后程序运行得很好。所以问题已经结束了。