在C中向后循环名称

时间:2015-07-06 01:36:02

标签: c arrays string loops

我想从n次(n = 1-100)向后打印我的名字。我似乎无法弄明白。正如您可以通过我的代码看到的那样,strrev()在循环时不起作用,因为它不断地反复转换。我还想以某种方式强制用户输入一个字母而不是姓名,但这并不是必须的。

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

int main () 
{
    int choice;
    char name[255];
    int loopCounter;
    int count;
    int number;

    do 
    {
        printf("1.Display Your Name\n");
        printf("2.Display Your Name (From 1-100)\n");
        printf("3.Display your Name Backwards\n");
        printf("4.Display Your Name Backwards (From 1-100)\n");
        printf("5.Quit\n");

        printf("Enter your name:\n");
        scanf("%s", name);

        printf("Enter your choice:   ");
        scanf("%i", &choice);

        switch(choice)
        {
            case 1: 
                printf("Your name is %s.\n", name);
                break;
            case 2:  
                printf("How many times to display your name? (1-100) ");
                scanf("%i", &count);

                if ( 100 < count) 
                {
                    printf("Please enter 1 through 100\n");
                }
                else 
                {
                    loopCounter = 0;
                    while (loopCounter < count ) 
                    {
                        loopCounter++;
                        printf("%d %s\n", loopCounter,name);
                    }
                }
                break;
            case 3:
                printf("Your name backwards is: %s\n\n", strrev(name));
                break;
            case 4:
                printf("How many times to display your name backwards? ");
                scanf("%i", &count);
                if ( 100 < count) 
                {
                    printf("Please enter 1 through 100\n");
                }
                else 
                {
                    loopCounter = 0;
                    while (loopCounter < count ) 
                    {
                        loopCounter++;
                        printf("%d %s\n", loopCounter, strrev(name));
                    }
                }
                break;
           case 5:
               printf("Goodbye!!!!\n");
               break;
           default:
               printf("Was not 1 through 5\n");
               break;
       }
   } while (choice!=5);
}   

2 个答案:

答案 0 :(得分:4)

您的问题是strrev()将字符串反转到位。

如果你想保留原文,你应该复制一个名字,然后在循环之前使用strrev()将其翻转一次。然后在循环中,只需调用反转名称。

否则,只需这样做:

loopCounter = 0;
strrev(name);
while (loopCounter < count ) {
    loopCounter++;
    printf("%d %s\n", loopCounter, name);
}

答案 1 :(得分:0)

还有另一种解决方案,不需要strrev ..请注意以下代码: - main()的

{
char name[255];
int loopcounter;
  for(loopcounter = strlen(name)-1; loopcounter>=0; loopcounter--)
  {
     printf("%c", name[loopcounter]);
  }
}

这段代码肯定能帮到你......好吧