使用sscanf()函数读取字符串

时间:2016-09-25 04:19:44

标签: c scanf

我是个乞丐,所以我被困在这一部分。我需要输入一个消息,以及一个移位金额,通过该移位金额,字母应该转移到“加密”消息。 问题是它没有显示任何文本,它只是永远不会退出while循环。

非常感谢任何帮助。

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

int main(void)
{

   char ch,message[50]={0};
   int shift;


   printf("Enter message to be encrypted: ");
   scanf("%s",message);
   printf("Enter shift amount (1-25): ");
   scanf("%d",&shift);

   printf("Encrypted message: ");

   while((sscanf(message," %c",&ch) == 1) && (ch != '\n'));
   {
       ch += shift;
       putchar(ch);
   }

    return 0;
}

输出:

Enter message to be encrypted: abcABC
Enter shift amount (1-25): 3
Encrypted message: 

(程序在一个infite循环中停留在那里)

2 个答案:

答案 0 :(得分:1)

你错误地使用sscanf。它将始终只读取第一个字符。

尝试这样做以达到你想要的效果。

int i=0;
while(i<strlen(message))
{
    ch=message[i++];
    ch += shift;
    putchar(ch);
}

答案 1 :(得分:1)

您的代码有很多内容 a)你有“;”在while的末尾 b)你总是只阅读sscanf内的第一个字符 这就是为什么你处于无限循环中。 我建议用for循环替换,如下所示。

scanf自动将'\ 0'附加到字符串的末尾。

int i;
for(i=0 ; i<50 && mesage[i] != '\0'; i++) 
{ 
    ch = message[i]; 
    ch += shift; 
    putchar(ch); 
}