2017-06-09 120 views
-7

具有可变打印字符串n次用C

h = get_int() 

如何打印(使用printf)这个变量

e = " " 

H与? 我知道这听起来很愚蠢,但我是个新手。

+2

你知道一个for循环是什么?你知道如何打印一次吗?你尝试了什么,你会得到什么错误? – user463035818

+5

[找到一个很好的入门书或教程(http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list)和阅读有关*循环*。 –

+0

看看一个[教科书](https://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list) –

回答

0

你大概是这个意思的printf ...

int i; 
for(i = 0; i < h; i++) 
    printf("%s ",e); 
+0

'%c'是你想要打印字符串的字符。你需要'%s'。此外,你只是使用'i'迭代,可以内声明它的'for'那样:'用于(INT I = 0; I <小时;我++)'所以它会离开循环之后被破坏。 – Badda

+0

@Badda你不能在循环中插入int,只有当你使用C99进行编译时,至少我在C中一直存在这个问题,yea应该是%s而不是%c –

+0

你在做什么不使用C11? C90是一个四分之一个世纪的老式过时的17年(它被C99取代)?您应该在默认情况下使用C11进行编译。 –

1

基于C阅读了循环here

for(int i = 0; i < h; i = i + 1) { 
     printf("%s", e); 
} 
+1

更传统的使用'; i ++)'作为'for'循环控制的最后一项。 –

+1

我同意,为了清晰起见,我延长了语法,因为他可能是非常新的循环 –

0

一个while循环也将适用。您可以使用变量h作为计数器。它while循环,你会先打印数量,然后在倒计时的方式计算的变量h,直至为0,你会印有它究竟是H-倍

这样
while(h>0){ 
    printf("%s", e); 
    h--; 
} 

声明:此意愿当然改变h的价值!如果你依靠它来使用它不变的其他地方,那么你应该去for循环解决方案

+1

这破坏了'h'的值。目前还不清楚这是否重要,但使用'h'作为限制的'for'循环可能更好。 –

+0

@JonathanLeffler你是对的,我写了一个免责声明,限制我的回答 –

0

我想这是你问什么。

#include <stdio.h> 
#include <stdlib.h> 

char *inputString(size_t size){ 

    char *str; 
    int ch; 
    size_t len = 0; 
    str = realloc(NULL, sizeof(char)*size); 
    if(!str)return str; 
    while(EOF!=(ch=fgetc(stdin)) && ch != '\n'){ 
     str[len++]=ch; 
     if(len==size){ 
      str = realloc(str, sizeof(char)*(size+=16)); 
      if(!str)return str; 
     } 
    } 
    str[len++]='\0'; 

    return realloc(str, sizeof(char)*len); 
} 

int main(void){ 
    char *e; 
    int times,i=0; 

    printf("input string : "); 
    e = inputString(10); 
    printf("Number: "); 
    scanf("%d",&times); 
    for(i=0;i<times;i++)  
     printf("%s ", e); 

    free(e); 
    return 0; 
} 
+1

字符阅读循环似乎坚持在退出之前得到一个空白或换行符。这很奇怪。通常情况下,你需要一个'图形'字符(不是空白的东西)。你可以用'“%c”'作为格式并且没有循环。另外,在第一次迭代中,'element'未初始化。不要测试未初始化的变量;你不知道会发生什么。在布局上保持一致也是一个好主意。你在'scanf()'周围有大括号,但它与'while'在同一行 - 这是非常令人讨厌的格式。 'for'没有大括号。我使他们一致。 –

+1

我向你提出问题,询问'e =“”'这可能是寻找空白或换行的部分理由,但你可以简单地使用'char * e =“”;'并且打印出来。 –

+2

OP明确询问如何打印一个可以写入/初始化为'e =“”'的变量。看起来你的答案没有涵盖目标。隐含的问题“我如何学习C的基本概念?”你也没有回答。 – Yunnosch

0

一个for循环是计数迭代的典型方式,但的语法while循环可能是一个初学者更加清晰:

int count = 0; 
while (count < h) { 
    printf("%s", e); 
    count = count + 1; 
}