如何在循环中使用 scanf,将值存储到一个变量中,然后稍后打印?
How to use scanf in a loop, store the value into one variable and then print it later?
我正在尝试制作一个程序,用户可以在其中输入他们想要的测试用例的数量,输入字母的数量,然后打印它。
因为我想在 i 的值与 input 相同之后做 Cases 的 printf ,这意味着我必须首先保留 word 的值,但是 next scanf 总是覆盖前一个 scanf 的值。
这是我当前的代码:
#include<stdio.h>
int main()
{
int input=0;
int word=0;
int i=0;
int j=1;
scanf("%d", &input); //number of test cases
for(i=0;i<input;i++)
{
scanf("%d", &word); //how many alphabets
}
for(;i>0;i--)
{
printf("Case #%d: ", j);
j++;
if(word==1)
printf("a\n");
if(word==2)
printf("ab\n");
if(word==3)
printf("abc\n");
else
return 0;
return 0;
}
比如目前程序是这样运行的:
2
1
2
Case #1: ab
Case #2: ab
这意味着第二个word scanf (2) 覆盖了它之前的值(1)。
当我希望它像这样工作时:
2
1
2
Case #1: a
Case #2: ab
我一直在 google 寻找答案,但一直没有找到。
如果可能,请告诉我如何在 stdio.h 中执行此操作,以及调用的函数是什么(如递归、选择等)。
非常感谢。
首先,您需要用 C 还是 C++ 编写此代码?如果您将此 post 标记为 C++,但代码是用 C 编写的。所以我会用 C 来回答。
在这种情况下,您有两种解决方案:
简单的方法是在用户像这样进行第二次输入后打印 Case
:
#include<stdio.h>
int main()
{
int input=0;
int word=0;
int i=0;
scanf("%d", &input); //number of test cases
for(i = 0; i < input; i++)
{
scanf("%d", &word); //how many alphabets
printf("Case #%d: ", i);
if(word==1)
printf("a\n");
if(word==2)
printf("ab\n");
if(word==3)
printf("abc\n");
}
return 0;
}
或者您必须制作一些动态结构来保存所有用户输入,然后对其进行迭代并打印您的案例。在 C 中它看起来像这样:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int input=0;
int i=0;
int j=1;
int* word = NULL;
scanf("%d", &input); //number of test cases
if (input > 0) { // check if input cases are more than 0;
word = (int*)malloc(sizeof(int) * input);
}
for(i=0;i<input;i++) {
scanf("%d", &word[i]); //how many alphabets. Write new
}
for(;i > 0;i--) {
printf("Case #%d: ", j);
j++;
if(word[i-1] == 1)
printf("a\n");
if(word[i-1] == 2)
printf("ab\n");
if(word[i-1] == 3)
printf("abc\n");
}
free(word);
return 0;
}
当然,如果是动态数组,您需要检查单词 ptr 是否不为空。但这个案例展示了一个更大的图景。
如果您决定使用 C++,那会更容易,因为您可以使用 std::vector 作为动态容器,而无需使用指针。
我正在尝试制作一个程序,用户可以在其中输入他们想要的测试用例的数量,输入字母的数量,然后打印它。
因为我想在 i 的值与 input 相同之后做 Cases 的 printf ,这意味着我必须首先保留 word 的值,但是 next scanf 总是覆盖前一个 scanf 的值。
这是我当前的代码:
#include<stdio.h>
int main()
{
int input=0;
int word=0;
int i=0;
int j=1;
scanf("%d", &input); //number of test cases
for(i=0;i<input;i++)
{
scanf("%d", &word); //how many alphabets
}
for(;i>0;i--)
{
printf("Case #%d: ", j);
j++;
if(word==1)
printf("a\n");
if(word==2)
printf("ab\n");
if(word==3)
printf("abc\n");
else
return 0;
return 0;
}
比如目前程序是这样运行的:
2
1
2
Case #1: ab
Case #2: ab
这意味着第二个word scanf (2) 覆盖了它之前的值(1)。 当我希望它像这样工作时:
2
1
2
Case #1: a
Case #2: ab
我一直在 google 寻找答案,但一直没有找到。 如果可能,请告诉我如何在 stdio.h 中执行此操作,以及调用的函数是什么(如递归、选择等)。 非常感谢。
首先,您需要用 C 还是 C++ 编写此代码?如果您将此 post 标记为 C++,但代码是用 C 编写的。所以我会用 C 来回答。
在这种情况下,您有两种解决方案:
简单的方法是在用户像这样进行第二次输入后打印 Case
:
#include<stdio.h>
int main()
{
int input=0;
int word=0;
int i=0;
scanf("%d", &input); //number of test cases
for(i = 0; i < input; i++)
{
scanf("%d", &word); //how many alphabets
printf("Case #%d: ", i);
if(word==1)
printf("a\n");
if(word==2)
printf("ab\n");
if(word==3)
printf("abc\n");
}
return 0;
}
或者您必须制作一些动态结构来保存所有用户输入,然后对其进行迭代并打印您的案例。在 C 中它看起来像这样:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int input=0;
int i=0;
int j=1;
int* word = NULL;
scanf("%d", &input); //number of test cases
if (input > 0) { // check if input cases are more than 0;
word = (int*)malloc(sizeof(int) * input);
}
for(i=0;i<input;i++) {
scanf("%d", &word[i]); //how many alphabets. Write new
}
for(;i > 0;i--) {
printf("Case #%d: ", j);
j++;
if(word[i-1] == 1)
printf("a\n");
if(word[i-1] == 2)
printf("ab\n");
if(word[i-1] == 3)
printf("abc\n");
}
free(word);
return 0;
}
当然,如果是动态数组,您需要检查单词 ptr 是否不为空。但这个案例展示了一个更大的图景。
如果您决定使用 C++,那会更容易,因为您可以使用 std::vector 作为动态容器,而无需使用指针。